使用CMake为CUDA可执行文件设置Win32选项时出错
我正在将CUDA支持构建到我拥有的CMake项目中,但在尝试将可执行文件类型设置为WIN32时,我遇到了一个非常奇怪的错误 在使用CUDA之前,我使用cmake命令添加可执行文件:使用CMake为CUDA可执行文件设置Win32选项时出错,cuda,cmake,Cuda,Cmake,我正在将CUDA支持构建到我拥有的CMake项目中,但在尝试将可执行文件类型设置为WIN32时,我遇到了一个非常奇怪的错误 在使用CUDA之前,我使用cmake命令添加可执行文件: add_executable(${BINARY_NAME} WIN32 ${SOURCES}) 效果很好。然后,为了添加CUDA支持,我将此行更改为: cuda_add_executable(${BINARY_NAME} WIN32 ${SOURCES}) 这会给出一个错误,因为CMake错误地将WIN32解析为
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\u GET\u SOURCES\u和\u OPTIONS
中的一个CMake选项。在该函数中,它迭代cuda_add_executable的参数,并与字符串“WIN32”、“MACOSX_BUNDLE”进行比较,该字符串预期为选项,但与WIN32的比较失败,因为它被自动设置为CMake变量为1/true
我可以避开这个错误,但是在调用cuda\u add\u executable
然后重置它之前使用unset(WIN32)
尽管我可以通过一个小技巧来避免这个错误,但我还是不想让自己在将来遭遇更大的失败,因为我假设我在设置过程中犯了一些错误,尽管CMake本身已经将WIN32设置为一个变量。有人知道问题出在哪里吗?这是
FindCUDA
模块中的一个错误。我已经安装了CMake 2.8.12.1,其中存在此错误,以及CMake 3.1,其中已修复。因此,一个解决方案是升级到CMake版本,在该版本中这是固定的
如果这不是你的选择,这里有一个解决办法。在add\u executable
调用中指定WIN32
实际上是将目标上的属性WIN32\u executable
设置为true。您也可以手动执行此操作,而不是使用WIN32
:
cuda_add_executable(${BINARY_NAME} ${SOURCES})
set_property(TARGET ${BINARY_NAME} PROPERTY WIN32_EXECUTABLE TRUE)
哪个CMake版本?我在看CMake 3.1附带的
FindCUDA
模块,它肯定不会出现这个问题。嗨@Angew,我使用的是CMake 2.8.12。