似乎CMake在其视图中已经相当根深蒂固,所有C ++源文件应该只有一个CMAKE_CXX_COMPILER。我无法找到一种在每个目标的基础上覆盖它的方法。这使得在单个CMakeLists.txt中混合主机和交叉编译非常困难,内置的CMake工具。
所以,我的问题是:对于同一种语言(即C ++)使用多个编译器的最佳方法是什么?
答案 0 :(得分:13)
使用CMake无法做到这一点。
CMake只保留一组编译器属性,这些属性由CMakeLists.txt文件中的所有目标共享。如果要使用两个编译器,则需要运行两次CMake。这对于例如从同一个编译器工具链构建32位和64位二进制文件。
快速而肮脏的方法是使用自定义命令。但是你最终会得到基本上美化的shell脚本,这可能不是你想要的。
干净的解决方案是:不要将它们放在相同的CMakeLists.txt中!无论如何,您无法在不同的体系结构之间进行链接,因此不需要它们位于同一个文件中。您可以通过将CMake脚本的常用部分重构为单独的文件并include()
来减少冗余。
这里的主要缺点是您失去了使用单个命令构建的能力,但是您可以通过使用您喜欢的脚本语言编写包装来解决这个问题,该语言负责调用不同的CMake-makefiles。
答案 1 :(得分:3)
您可能想要查看ExternalProject: http://www.kitware.com/media/html/BuildingExternalProjectsWithCMake2.8.html
答案 2 :(得分:0)
延长@Bill Hoffman的回答: 使用某种模板(例如https://github.com/Sarcasm/cmake-superbuild模板)将您的项目构建为超级构建 它将依赖项和项目配置为ExternalProject(独立的cmake configure / build / install环境)。