cmake:CUDA目标的特定于目标的预处理器定义似乎不起作用

时间:2010-05-16 08:39:47

标签: cmake cuda

我在使用CUDA 3.0的Mac OSX 10.6上使用cmake 2.8.1。

所以我添加了一个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在代码中使用,但无处定义。现在我对CPU目标使用了相同的定义(使用add_executable(...))并且在那里工作。

现在问题是:如果cmake行指向CUDA目标,我如何弄清set_target_properties对{{1}}行的影响?谷歌搜索到目前为止没有帮助,一个解决方案将很酷..

2 个答案:

答案 0 :(得分:4)

我认为最好的方法是在cuda_add_executable中添加“OPTIONS -DBLOCK_SIZE = 3”。所以你的行看起来像这样:

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

或者您可以在cuda_add_executable之前设置它:

SET(CUDA_NVCC_FLAGS -DBLOCK_SIZE=3)

答案 1 :(得分:0)

到目前为止我找到的唯一解决方法是使用remove_definitions:

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

在目标之前执行此操作似乎有所帮助。