cmake: Специфичные для цели определения препроцессора для целей CUDA, похоже, не работают - PullRequest
3 голосов
/ 16 мая 2010

Я использую cmake 2.8.1 на Mac OSX 10.6 с CUDA 3.0.

Итак, я добавил цель CUDA, для которой необходимо BLOCK_SIZE установить некоторое число для компиляции.

cuda_add_executable(SimpleTestsCUDA
                    SimpleTests.cu
                    BlockMatrix.cpp 
                    Matrix.cpp
)

set_target_properties(SimpleTestsCUDA PROPERTIES COMPILE_FLAGS -DBLOCK_SIZE=3)

При запуске make VERBOSE=1 я заметил, что nvcc вызывается без -DBLOCK_SIZE=3, что приводит к ошибке, потому что BLOCK_SIZE используется в коде, но не определено нигде. Теперь я использовал то же определение для цели процессора (используя add_executable(...)), и там это сработало.

Итак, теперь вопросы: как мне выяснить, что cmake делает со строкой set_target_properties, если она указывает на цель CUDA? Гуглить вокруг пока не помогло, и обходной путь был бы крут ..

Ответы [ 2 ]

4 голосов
/ 16 мая 2010

Я думаю, что лучший способ сделать это - добавить "OPTIONS -DBLOCK_SIZE = 3" в cuda_add_executable. Итак, ваша строка будет выглядеть так:

cuda_add_executable(SimpleTestsCUDA
                SimpleTests.cu
                BlockMatrix.cpp 
                Matrix.cpp
                OPTIONS -DBLOCK_SIZE=3
)

Или вы можете установить его до cuda_add_executable:

SET(CUDA_NVCC_FLAGS -DBLOCK_SIZE=3)
0 голосов
/ 19 мая 2010

Единственный найденный мной обходной путь - это использование remove_definitions:

remove_definitions(-DBLOCK_SIZE=3)
add_definitions(-DBLOCK_SIZE=32)

Делайте это до того, как цель, кажется, поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...