【发布时间】:2015-05-28 10:55:37
【问题描述】:
我正在将 CUDA 支持构建到我拥有的 CMake 项目中,但在尝试将可执行文件类型设置为 WIN32 时遇到一个非常奇怪的错误。
在使用 CUDA 之前,我使用 cmake 命令添加我的可执行文件:
add_executable(${BINARY_NAME} WIN32 ${SOURCES})
效果很好。然后,为了添加 CUDA 支持,我将这一行更改为:
cuda_add_executable(${BINARY_NAME} WIN32 ${SOURCES})
这会导致错误,因为 CMake 错误地将 WIN32 解析为源文件。具体错误是:
Cannot find source file:
WIN32
Tried extensions .c .C .c++ .cc .cpp .cxx .m .M .mm .h .hh .h++ .hm .hpp .hxx .in .txx
当我尝试对此进行调试时,我查看了发生错误的 CMake FindCUDA.cmake 文件,我可以看到它无法将 WIN32 拆分为宏 CUDA_GET_SOURCES_AND_OPTIONS 中的 cmake 选项。在此函数中,它迭代 cuda_add_executable 的参数并与字符串“WIN32”、“MACOSX_BUNDLE”、...进行比较,它期望作为选项但在比较 WIN32 时失败,因为它被自动设置为 CMake 变量为 1/真的。
我可以回避这个错误,但在调用 cuda_add_executable 之前使用 unset(WIN32) 然后在之后重置它,但考虑到这一点
- 网上没有关于此错误的任何信息,表明这不是常见问题
- 建议在CMake documentation 上使用WIN32
虽然我可以通过一个小技巧来避免这个错误,但我宁愿不要让自己在未来遇到更大的失败,因为我认为我在设置中做错了什么,尽管 CMake 本身已经设置了 WIN32作为变量。有谁知道问题出在哪里?
【问题讨论】:
-
哪个 CMake 版本?我正在查看 CMake 3.1 附带的
FindCUDA模块,它绝对不会遇到这个问题。 -
嗨@Angew 我正在使用CMake 2.8.12。