CMake 似乎相当坚定地认为所有 C++ 源文件都应该有一个,而且只有一个 CMAKE_CXX_COMPILER。我找不到在每个目标的基础上覆盖它的方法。这使得使用内置 CMake 工具在单个 CMakeLists.txt 中混合主机和交叉编译非常困难。
所以,我的问题是:为同一语言(即 C++)使用多个编译器的最佳方式是什么?
最佳答案
使用 CMake 是不可能做到这一点的。
CMake 仅保留一组编译器属性,这些属性由 CMakeLists.txt 文件中的所有目标共享。如果要使用两个编译器,则需要运行两次 CMake。这甚至适用于例如从同一个编译器工具链构建 32 位和 64 位二进制文件。
解决此问题的快捷方式是使用自定义命令。但是你最终得到了基本上是美化的 shell 脚本,这可能不是你想要的。
干净的解决方案是:不要将它们放在同一个 CMakeLists.txt 中!无论如何,您无法在不同架构之间进行链接,因此无需将它们放在同一个文件中。您可以通过将 CMake 脚本的公共(public)部分重构为单独的文件并 include()
来减少冗余。
这里的主要缺点是您无法使用单个命令进行构建,但您可以通过使用您最喜欢的脚本语言编写一个包装器来解决这个问题,该包装器负责调用不同的 CMake-makefile。
https://stackoverflow.com/questions/9542971/