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

使用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解析为

我正在将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\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)

  • 网上没有关于这个错误的任何信息表明这不是一个常见的问题
  • 建议在上使用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。