我从 boost::asio
添加了一些功能,这引发了一些编译器“警告”:
请适当定义_WIN32_WINNT 或_WIN32_WINDOWS。
到 这里 就解决了这个问题。我想让 CMake 检测我何时在 Windows 上构建并做出适当的定义或命令行参数。
原文由 2NinerRomeo 发布,翻译遵循 CC BY-SA 4.0 许可协议
我从 boost::asio
添加了一些功能,这引发了一些编译器“警告”:
请适当定义_WIN32_WINNT 或_WIN32_WINDOWS。
到 这里 就解决了这个问题。我想让 CMake 检测我何时在 Windows 上构建并做出适当的定义或命令行参数。
原文由 2NinerRomeo 发布,翻译遵循 CC BY-SA 4.0 许可协议
我想在这里澄清一个尚未有人提及的细节。这一点在交叉编译时尤其适用,但在其他情况下也有效。
CMAKE_HOST_WIN32
是在 Windows 上编译时设置的变量。
WIN32
是为 Windows 目标平台编译时设置的变量。
所以 CMAKE_HOST_WIN32
是正确的标志,考虑到 OP 的问题,字面意思是“当我在 Windows 上构建时”。在许多情况下 WIN32
和 CMAKE_HOST_WIN32
将是等价的,但并非在所有情况下都是等价的。
WIN32
将在开始时在 Windows 上为非 Windows 交叉编译时设置,但在 CMake 执行期间的某个时候会隐式取消设置(我相信在 project
调用中)。上次我检查 WIN32
是在执行 toolchain.cmake 期间设置的,但后来没有设置。所以在这些情况下,这个标志可能是危险的,因为它的状态在执行期间发生了变化。您不应该在工具链文件中使用 WIN32
!
如果您需要有关正在构建的平台的详细信息,可以尝试变量 CMAKE_HOST_SYSTEM_NAME
和 CMAKE_HOST_SYSTEM_VERSION
MESSAGE("CMAKE_HOST_SYSTEM_NAME ${CMAKE_HOST_SYSTEM_NAME}")
MESSAGE("CMAKE_HOST_SYSTEM_VERSION ${CMAKE_HOST_SYSTEM_VERSION}")
给我以下输出(在 CMake 版本 3.19.2 上)
CMAKE_HOST_SYSTEM_NAME Windows
CMAKE_HOST_SYSTEM_VERSION 10.0.19044
还有 CMAKE_HOST_SYSTEM
里面的工具链文件给了我空白,但是在 project
之后它给了“Windows-10.0.19044”
原文由 llahteinen 发布,翻译遵循 CC BY-SA 4.0 许可协议
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.4k 阅读
1 回答1.6k 阅读✓ 已解决
这是一个简单的解决方案。