Как и любая другая переменная CMAKE_<LANG>_FLAGS
, переменная CUDA_NVCC_FLAGS
устанавливается при вызове project(CUDA)
при обнаружении компилятора.Поэтому добавление к этой переменной должно выполняться после вызова project
:
project(MyProject CUDA)
set(CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS} $ENV{CUDA_NVCC_FLAGS} -lineinfo --default-stream per-thread --disable-warnings")
Если CUDA обнаруживается с find_package(CUDA)
(в старых версиях CMake, которые изначально не поддерживают CUDA), затем добавление флагов должно следовать после find_package(CUDA)
, который устанавливает переменную CUDA_NVCC_FLAGS
:
find_package(CUDA REQUIRED)
set(CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS} $ENV{CUDA_NVCC_FLAGS} -lineinfo --default-stream per-thread --disable-warnings")
Причина, по которой обратный порядок работает, но только в не первой конфигурации, заключается вэта переменная CUDA_NVCC_FLAGS
на самом деле кэшируется : первый вызов project()
устанавливает значение переменной и сохраняет его в кеше.Дальнейшие project()
вызовы обнаруживают, что компилятор уже проверен, и не переустанавливают переменную.