似乎 CMake 认为所有 C++ 源文件都应该有一个,而且只有一个 CMAKE_CXX_COMPILER。我找不到在每个目标的基础上覆盖它的方法。这使得使用内置 CMake 工具在单个 CMakeLists.txt 中混合主机和交叉编译非常困难。
所以,我的问题是:为同一种语言(即 C++)使用多个编译器的最佳方式是什么?
原文由 cdleary 发布,翻译遵循 CC BY-SA 4.0 许可协议
似乎 CMake 认为所有 C++ 源文件都应该有一个,而且只有一个 CMAKE_CXX_COMPILER。我找不到在每个目标的基础上覆盖它的方法。这使得使用内置 CMake 工具在单个 CMakeLists.txt 中混合主机和交叉编译非常困难。
所以,我的问题是:为同一种语言(即 C++)使用多个编译器的最佳方式是什么?
原文由 cdleary 发布,翻译遵循 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 阅读✓ 已解决
用 CMake 不可能做到这一点。
CMake 只保留一组编译器属性,由 CMakeLists.txt 文件中的所有目标共享。如果要使用两个编译器,则需要运行两次 CMake。这甚至适用于从同一个编译器工具链构建 32 位和 64 位二进制文件。
解决这个问题的快速而肮脏的方法是使用自定义命令。但是你最终得到了基本上是美化的 shell 脚本,这可能不是你想要的。
干净的解决方案是:不要将它们放在同一个 CMakeLists.txt 中!无论如何,您无法在不同架构之间进行链接,因此无需将它们放在同一个文件中。您可以通过将 CMake 脚本的公共部分重构为单独的文件和
include()
来减少冗余。这里的主要缺点是您失去了使用单个命令构建的能力,但您可以通过用您最喜欢的脚本语言编写一个包装器来解决这个问题,该包装器负责调用不同的 CMake-makefile。