使用 C++ 脚本自动化 CMake 构建

Posted

技术标签:

【中文标题】使用 C++ 脚本自动化 CMake 构建【英文标题】:Automate CMake build using C++ script 【发布时间】:2019-04-24 15:10:53 【问题描述】:

我想使用 MSVC C++ 脚本自动构建 CMake,而不是使用 CMake-gui 生成构建或 CMake 终端,或者通过右键单击 CMakeLists.txt 使用集成在 MSVC 2017 上的 CMake 手动构建它.假设我们有一个包含 CMakeLists.txt 和 initialize.cpp 的项目(命名:initialize),所以我的问题是如何将这些命令转换为 C++ 代码,假设 build_initialize.cpp:

mkdir 构建 cd 构建/ cmake ..

所以,这个微小的 C++ 代码的要求是

设置此项目的路径 创建构建文件夹 运行 CMake

最后,如果我执行 build_initialize.exe,工作只是使用 CMake 构建 initialize.cpp。目标是测试构建是否成功,作为另一个具有多个测试用例的项目中的测试用例。

你可能会问,为什么我没有将它包含在顶部的 CMakelists.txt 中,然后使用 CMake 从头开始​​构建它。如果我要这样做,我会得到一个可执行文件。因此,通过运行 CMake 的 ctest,initialize.exe 将需要一定的硬件速度。这不是目标。我的目标只是构建它。如果我运行 build_initialize.exe,只需使用 CMake 重复构建而不执行 initialize.exe。

抱歉,这可能很简单,但我缺乏 C++ 或 CMake 方面的良好经验。两天没成功。

【问题讨论】:

您可以使用 Python、Perl 等脚本语言创建脚本。C++ 不是其中之一。 在 Windows 上考虑使用内置的 PowerShell 脚本功能(或使批处理文件失败)。 我希望您的问题是您在 c++ 代码中调用了超过 1 次 system() 或者没有正确地转义您的字符串。虽然这些只是猜测,因为您没有提供任何代码。 如果您使用的是 Windows 版 Git,只需使用 bash 脚本。有比使用 C++ 更简单的方法。 然后显示您尝试过和失败的内容。请记住,我们通常不会在 *** 上为您编写代码,但我们会尝试修复您损坏的代码。请编辑您的问题并添加您尝试的最小示例:minimal reproducible example 【参考方案1】:

感谢大家的 cmets。 @Fred 已经给出了答案。要从 C++ 脚本运行 cmake,只需使用 system(),例如:System(cmake -S path_to_src -B path_to_bld)。 有用链接:https://faq.cprogramming.com/cgi-bin/smartfaq.cgi?id=1043284392&answer=1044654269

【讨论】:

以上是关于使用 C++ 脚本自动化 CMake 构建的主要内容,如果未能解决你的问题,请参考以下文章

当 CMake 中的生成器或输入发生更改时,如何仅构建自动生成的代码?

在 linux 下使用 CMake 构建应用程序

非C项目的跨平台自动构建

我真的需要 cmake 来构建自动化吗?

配置 C++ 应用程序构建的简单方法

CMake如何验证循环是不是自动矢量化