如何使用 CMake 复制现代 IDE 的 "build and run" 功能?

how can I replicate the "build and run" functionality of modern IDEs using CMake?

我有一个正在 Linux 中创建的 C 项目。构建由 CMake 管理。该项目分为源代码的常用文件夹,包括一个构建文件夹,CMake 在其中为我生成一个可执行文件 运行。

运行 二进制文件需要先设置一个环境变量,并且还要将一些开关传递给程序的命令行。每次输入“make”后都必须输入命令行,这很乏味。在我注销之前,依靠 shell 来调用之前的命令是可以的。我知道现代 IDEs 提供了这个功能,但我不希望我的构建系统依赖于特定的 IDE.

我想通过简单地输入类似“make 运行”的内容来缩短编辑-编译-运行 周期,它应该适当地编译任何过时的源,然后 运行结果二进制。最好不必将二进制名称硬编码为任何内容(我认为 CMake 在您使用 add_executable() 后知道它是什么,我想在将来为其他项目复制此目录树)。

我敢肯定网上有一些解释,但我想不出正确的词来 Google 来找到它。

拥有:

add_executable(my_exe ....)

要添加自定义目标,您可以执行以下操作:

add_custom_target(run COMMAND env VARIABLE=20 $<TARGET_FILE:my_exe> ARG1 ARG2)

如果您正在测试您的命令,这在概念上与 运行 它不同,那么添加一个测试:

add_test(NAME test1 COMMAND $<TARGET_FILE:my_exe> arg1 arg)
set_property(TEST test1 PROPERTY ENVIRONMENT
      VARIABLE=something
      ANOTHER_VARIABLE=something_else
)
add_test(NAME test2 COMMAND $<TARGET_FILE:my_exe> arg1 arg2)
set_property(TEST test2 PROPERTY ENVIRONMENT
      VARIABLE=something_else
      ANOTHER_VARIABLE=yet_something_else
)
etc..

研究ctest and cmake testing.

在使用 cmake 时更喜欢使用 cmake --build <build_dir> --target run 而不是 make run,以便与生成器无关,这样当您决定切换到 Ninja 以加快编译时间时,您将不会重构您的构建过程。