0

我打算使用 CMake 来构建跨平台/跨编译器解决方案。想象一下这样的树:

项目
  |__包括
  |__src
  |__构建规则

目录 buildrules 将包含我的 CMake 扩展和公共子项目选项以及一些用于在不同平台上启动构建的脚本(.sh .bat 文件)。我打算使用相同的源代码树来构建使用不同的编译器/配置。所以在 NT 上,我需要能够生成用于开发的 VS 项目文件和用于命令行批处理构建的 NMake 生成文件。在 linux 上,同一棵树可用于使用 32/64 变体中的不同编译器(gcc、clang、icc)进行构建。所以 buildrules 不是 CMake 缓存的目录。对于每个具有不同名称的配置/生成器,我需要不同的构建目录(特定于配置/生成器的名称)。

现在几乎每个 CMake 教程都以“创建构建子目录,运行 cmake,运行 make”之类的内容开始。这对我来说似乎相当不受欢迎。我需要完全自动化的构建系统,所以它可以通过“单击”运行。我希望能够从 buildrules 运行一些命令(例如我的快捷批处理文件之一),它应该在项目根目录下创建正确名称的 build 目录(如果它还没有),在该目录中运行 cmake 以生成缓存(如果之前没有完成)并通过调用正确的工具开始构建:在 unix 上调用 make,在 Windows 命令行中调用 nmake,对于 VC 解决方案,要么启动一个,要么调用批处理构建等。

最重要的是,我希望所有这些都由 cmake 自己完成——我不想在它之上使用不同的平台特定工具编写另一个可移植性级别。我可以容忍的唯一特定于平台的事情是 cmake cmake.exe 之间的差异。

那么,你认为这可以做到吗?

如果有人可以帮助我进行此设置,我将不胜感激。

谢谢你。

4

1 回答 1

0

工具 cmake.exe 本身仅用于生成跨平台特定解决方案/make 文件。使用 ctest.exe 安排 (1) cmake 配置步骤,(2) 运行构建,(3) 运行单元测试,(4) 将结果提交到cdash

似乎可以根据此页面从 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

我知道这并不能完全回答你的问题,但希望它能给你一个方向。

于 2013-06-13T08:29:05.433 回答