我正在将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 / true。
我可以回避此错误,但在调用unset(WIN32)
之前使用cuda_add_executable
,然后重置它,但鉴于此
虽然我可以通过一个小小的黑客来避免这个错误,但是我宁愿在将来为更大的失败做好准备,因为我认为我在设置中做错了,尽管CMake这个事实本身已将WIN32设置为变量。有谁知道问题是什么?
答案 0 :(得分:3)
这是FindCUDA
模块中的错误。我安装了CMake 2.8.12.1,这个bug存在,以及CMake 3.1,它已经修复了。因此,一种解决方案是升级到修复版本的CMake版本。
如果这不是您的选择,那么这是一种解决方法。在WIN32
调用中指定add_executable
的所有操作都确实将目标上的属性WIN32_EXECUTABLE
设置为true。您也可以手动执行此操作,而不是使用WIN32
:
cuda_add_executable(${BINARY_NAME} ${SOURCES})
set_property(TARGET ${BINARY_NAME} PROPERTY WIN32_EXECUTABLE TRUE)