我在带有 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
行的作用?谷歌搜索到目前为止没有帮助,解决方法会很酷..
最佳答案
我认为最好的方法是将“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)
关于cmake:CUDA 目标的目标特定预处理器定义似乎不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2843075/