我计划使用CMake构建跨平台/交叉编译器解决方案。想象一下这样的树:
project |__include |__src |__buildrules
目录buildrules将包含我的CMake扩展和常见子项目选项以及一些脚本以在不同平台(.sh .bat文件)上启动构建。我打算使用相同的源代码树来构建使用不同的编译器/配置。所以在NT上,我需要能够生成用于开发的VS项目文件和用于命令行批量构建的NMake makefile。在linux上,可以使用相同的树在32/64变体中使用不同的编译器(gcc,clang,icc)进行构建。因此buildrules不是CMake缓存的目录。我需要具有不同名称的每个配置/生成器的不同构建目录(特定于配置/生成器的名称)。
现在几乎每个CMake教程都以“create build subdirectory,run cmake,run make”之类的东西开头。这似乎对我不利。我需要完全自动化的构建系统,因此可以通过“单击”运行。我希望能够从buildrules(例如我的一个快捷批处理文件)运行一些命令,它应该在项目根目录下创建正确的名称构建目录(如果它还没有),在该目录中运行cmake来生成缓存(如果之前没有完成)并通过调用正确的工具开始构建:在unix上调用make,在windows命令行中调用nmake,对于VC解决方案要么启动一个,要么调用批量构建等。
最重要的是,我希望所有这些都由cmake本身完成 - 我不想使用不同的平台特定工具在其上编写另一个可移植性级别。我能容忍的唯一平台特定事情是cmake cmake.exe。
之间的区别那么,你认为这可以做到吗?
如果有人可以帮我解决这个问题,我真的很感激。
谢谢。
答案 0 :(得分:0)
工具cmake.exe本身仅用于生成跨平台的特定解决方案/ make文件。使用ctest.exe进行调度(1)cmake configure步骤,(2)运行构建,(3)运行单元测试,(4)将结果提交给cdash。
似乎可以根据this page从cmake脚本配置ctest,但我自己从未尝试过。我们有一个带有单个批处理文件的解决方案,它们可以相互调用这五个ctest命令:
ctest.exe -D NightlyStart -C Release
ctest.exe -D NightlyConfigure -C Release
ctest.exe -D NightlyBuild -C Release
ctest.exe -D NightlyTest -C Release
ctest.exe -D NightlySubmit -C Release
我知道这并没有完全回答你的问题,但希望它能给出一个方向。