【问题标题】:how can I replicate the "build and run" functionality of modern IDEs using CMake?如何使用 CMake 复制现代 IDE 的“构建和运行”功能?
【发布时间】:2021-07-19 04:00:49
【问题描述】:

我有一个在 Linux 中创建的 C 项目。使用 CMake 管理构建。该项目分为通常的源文件夹、包含文件夹和一个构建文件夹,CMake 在其中生成一个可执行文件供我运行。

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

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

我确定网上有一些解释,但我无法找出正确的词,以便在 Google 中找到它。

【问题讨论】:

  • 您要运行您的可执行文件,还是测试您的可执行文件? Running the binary requires setting an environment variable first, and also passing in some switches to the program's command line 那为什么不把它硬编码到二进制文件中呢?

标签: c cmake build


【解决方案1】:

拥有:

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..

研究ctestcmake testing

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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-06-14
  • 2021-08-17
  • 2022-11-13
  • 2022-10-25
  • 2020-07-21
  • 2019-07-31
  • 2015-10-14
相关资源
最近更新 更多