将CMake与多个编译器一起用于同一种语言

时间:2012-03-03 02:50:27

标签: c++ configuration build cmake

似乎CMake在其视图中已经相当根深蒂固,所有C ++源文件应该只有一个CMAKE_CXX_COMPILER。我无法找到一种在每个目标的基础上覆盖它的方法。这使得在单个CMakeLists.txt中混合主机和交叉编译非常困难,内置的CMake工具。

所以,我的问题是:对于同一种语言(即C ++)使用多个编译器的最佳方法是什么?

3 个答案:

答案 0 :(得分:13)

使用CMake无法做到这一点。

CMake只保留一组编译器属性,这些属性由CMakeLists.txt文件中的所有目标共享。如果要使用两个编译器,则需要运行两次CMake。这对于例如从同一个编译器工具链构建32位和64位二进制文​​件。

快速而肮脏的方法是使用自定义命令。但是你最终会得到基本上美化的shell脚本,这可能不是你想要的。

干净的解决方案是:不要将它们放在相同的CMakeLists.txt中!无论如何,您无法在不同的体系结构之间进行链接,因此不需要它们位于同一个文件中。您可以通过将CMake脚本的常用部分重构为单独的文件并include()来减少冗余。

这里的主要缺点是您失去了使用单个命令构建的能力,但是您可以通过使用您喜欢的脚本语言编写包装来解决这个问题,该语言负责调用不同的CMake-makefiles。

答案 1 :(得分:3)

答案 2 :(得分:0)

延长@Bill Hoffman的回答: 使用某种模板(例如https://github.com/Sarcasm/cmake-superbuild模板)将您的项目构建为超级构建 它将依赖项和项目配置为ExternalProject(独立的cmake configure / build / install环境)。