【问题标题】:Error setting Win32 option for CUDA executable using CMake使用 CMake 为 CUDA 可执行文件设置 Win32 选项时出错
【发布时间】: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) 然后在之后重置它,但考虑到这一点

  1. 网上没有关于此错误的任何信息,表明这不是常见问题
  2. 建议在CMake documentation 上使用WIN32

虽然我可以通过一个小技巧来避免这个错误,但我宁愿不要让自己在未来遇到更大的失败,因为我认为我在设置中做错了什么,尽管 CMake 本身已经设置了 WIN32作为变量。有谁知道问题出在哪里?

【问题讨论】:

  • 哪个 CMake 版本?我正在查看 CMake 3.1 附带的 FindCUDA 模块,它绝对不会遇到这个问题。
  • 嗨@Angew 我正在使用CMake 2.8.12。

标签: cuda cmake


【解决方案1】:

这是FindCUDA 模块中的错误。我安装了存在此错误的 CMake 2.8.12.1,以及已修复的 CMake 3.1。因此,一种解决方案是升级到已修复此问题的 CMake 版本。

如果这不适合您,这里有一个解决方法。在add_executable 调用中指定WIN32 真正所做的就是将目标上的属性WIN32_EXECUTABLE 设置为true。您也可以手动执行此操作,而不是使用WIN32

cuda_add_executable(${BINARY_NAME} ${SOURCES})
set_property(TARGET ${BINARY_NAME} PROPERTY WIN32_EXECUTABLE TRUE)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-12
    • 1970-01-01
    • 2022-07-15
    • 1970-01-01
    • 2019-06-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多