我打算使用 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 之间的差异。
那么,你认为这可以做到吗?
如果有人可以帮助我进行此设置,我将不胜感激。
谢谢你。