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

发布于 2024-09-01 21:24:01 字数 703 浏览 4 评论 0原文

我在 Mac OSX 10.6 上使用 cmake 2.8.1 和 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,但没有定义。现在,我对 CPU 目标使用了相同的定义(使用 add_executable(...)),并且它起作用了。

现在的问题是:如果 cmake 指向 CUDA 目标,我如何弄清楚 cmake 对 set_target_properties 行的作用?到目前为止,谷歌搜索并没有帮助,解决方法会很酷。

I'm using cmake 2.8.1 on Mac OSX 10.6 with CUDA 3.0.

So I added a CUDA target which needs BLOCK_SIZE set to some number in order to compile.

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

set_target_properties(SimpleTestsCUDA PROPERTIES COMPILE_FLAGS -DBLOCK_SIZE=3)

When running make VERBOSE=1 I noticed that nvcc is invoked w/o -DBLOCK_SIZE=3, which results in an error, because BLOCK_SIZE is used in the code, but defined nowhere. Now I used the same definition for a CPU target (using add_executable(...)) and there it worked.

So now the questions: How do I figure out what cmake does with the set_target_properties line if it points to a CUDA target? Googling around didn't help so far and a workaround would be cool..

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

缱倦旧时光 2024-09-08 21:24:01

我认为最好的方法是将“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)

I think the best way to do this is by adding "OPTIONS -DBLOCK_SIZE=3" to cuda_add_executable. So your line would look like this:

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

Or you can set it before cuda_add_executable:

SET(CUDA_NVCC_FLAGS -DBLOCK_SIZE=3)
并安 2024-09-08 21:24:01

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

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

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

The only workaround I found so far is using remove_definitions:

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

Doing this before a target seems to help.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文