2010-05-16 21 views
3

我在Mac OSX 10.6上使用cmake 2.8.1和CUDA 3.0。cmake:特定於目標的CUDA目標預處理器定義似乎不起作用

所以我加了一個需要BLOCK_SIZE設置爲某個數字才能編譯的CUDA目標。

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

set_target_properties(SimpleTestsCUDA PROPERTIES COMPILE_FLAGS -DBLOCK_SIZE=3) 

當運行make VERBOSE=1我注意到nvcc被調用的w/o -DBLOCK_SIZE=3,這導致錯誤,因爲BLOCK_SIZE在代碼中所使用的,但遠不限定。現在我對CPU目標使用了相同的定義(使用add_executable(...))並且在那裏工作。

所以,現在的問題:如果指向一個CUDA目標,我如何計算cmakeset_target_properties行之間的差異?谷歌搜索並沒有幫助到目前爲止,一個解決方法將很酷..

+0

任何人都可以在Linux或Windows上嘗試這個嗎?我只是有我的MB pro這裏atm .. – Nils 2010-05-16 09:09:29

+0

也無法在Windows上工作。 – 2010-05-16 09:39:03

回答

4

我認爲最好的方法是通過添加「選項-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) 
+2

謝謝你,現在似乎工作。也許我應該報告這是一個錯誤? – Nils 2010-05-16 09:59:50

+0

SET(CUDA_NVCC_FLAGS -DBLOCK_SIZE = 3)這對所有目標都是一樣的,你不能使用set來重置它;它將採取最新的所有目標。 OPTIONS -DBLOCK_SIZE = 3似乎與CUDA目標,但不與正常的人合作.. 我想我就頭疼.. :( – Nils 2010-05-16 10:53:23

+0

選項僅適用於cuda_add_executable,爲add_executable你應該使用set_target_properties。 – 2010-05-16 11:13:00

0

我迄今發現的唯一的解決方法是使用remove_definitions:

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

這樣做在目標似乎有所幫助之前。