使用CMake为CUDA可执行文件设置Win32选项时出错

时间:2015-05-28 10:55:38

标签: cuda cmake

我正在将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,然后重置它,但鉴于此

  1. 网上出现此错误并不表示它不是常见问题
  2. 建议在CMake documentation
  3. 上使用WIN32

    虽然我可以通过一个小小的黑客来避免这个错误,但是我宁愿在将来为更大的失败做好准备,因为我认为我在设置中做错了,尽管CMake这个事实本身已将WIN32设置为变量。有谁知道问题是什么?

1 个答案:

答案 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)