【问题标题】:Add simple target to cmake generated makefile将简单目标添加到 cmake 生成的 makefile
【发布时间】:2019-04-09 15:30:24
【问题描述】:

TL;DR:如何让 cmake 在生成的 makefile 中输出以下规则?

.PHONY: target-I-want
target-I-want:
  echo "Hello World"

嗨,

我习惯于使用自己的 makefile 设置项目来运行它可能需要的任何类型的脚本。

我现在正在做的项目是使用cmake构建的,所以我不能只制作自己的makefile,因为它会被cmake生成的覆盖。

我正在使用不同的名称设置自己的 makefile,例如 makefile.dev,但由于我不想每次都运行 make -f makefile.dev target-I-want,我认为 add_custom_target 可以帮助我。

这就是我添加到我的 CMakeLists.txt 中的内容:

ADD_CUSTOM_TARGET(target-I-want
  COMMAND make -f ${CMAKE_CURRENT_SOURCE_DIR}/makefile.dev target-I-want
)

而且它有效。但是当我运行它时,它确实比只运行我想要的命令 (make -f ${CMAKE_CURRENT_SOURCE_DIR}/makefile.dev target-I-want) 更像,例如检查 cmake 构建系统并检查许多自动生成的目标。

我想知道是否有办法像我写的那样添加我想要的命令,没有额外的。

【问题讨论】:

  • 我怀疑有没有办法。
  • 好吧,如果您不想每次都使用 make 来构建您的自定义目标,您希望它如何运行?我认为cmake --build . --target target-I-want 也好不到哪里去。似乎您在add_custom_target() 命令中包含了“ALL”关键字。否则对我来说make 只是检查是否需要重新生成 Makefile,然后运行自定义目标的命令。您应该能够使用CMAKE_SUPPRESS_REGENERATION 来禁止重新生成检查。
  • @Fred 我想要的是能够运行cmake . 来生成我的makefile,只需运行make 就可以进行编译,而且我希望它有规则,所以我可以做make target-I-want 而不是 make -f makefile.dev target-I-want 但除此之外别无他法。我目前得到的是一个编译的makefile,有目标target-I-want所以我可以做make target-I-want但是检查makefile它有这个规则target-I-want: cmake_check_build_system <linebreak> $(MAKE) -f CMakeFiles/Makefile2 target-I-want等等
  • @ErickSepúlveda cmake 生成的 Makefile 中有很多样板项目。但是运行make target-I-want 将执行所需的命令并且不会构建许多其他东西,除非您使target-I-want 依赖于其他cmake 目标。听起来您不喜欢 Makefile 有打印出正在构建的目标的进度的开销。我读到您可以使用CMAKE_RULE_MESSAGES 减少状态/进度项的数量。就我个人而言,我认为在构建自定义目标时打印两行额外的文本没什么大不了的。

标签: bash makefile cmake


【解决方案1】:

我没有看到将任意文本插入生成的 Makefile 的命令。

根据您的 cmets,您需要让 CMake 生成一个自定义目标,该目标不包括使用 CMake 可执行文件本身。虽然可以抑制 Makefile 重新生成和详细状态消息,但自定义目标仍使用生成的 Makefile 的整体框架中的 CMake 可执行文件。

如果您真的不想输入make -f makefile.dev target-I-want,那么您将不得不寻找替代方法,例如设置别名或调用命令的脚本,或将任意文本附加到顶级 Makefile由 CMake 生成。

【讨论】:

  • 谢谢。这不是最佳的,但无论如何我真的很感谢你试图提供帮助:)
猜你喜欢
  • 2020-10-06
  • 1970-01-01
  • 2014-08-16
  • 2016-06-23
  • 1970-01-01
  • 2020-05-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多