【发布时间】: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减少状态/进度项的数量。就我个人而言,我认为在构建自定义目标时打印两行额外的文本没什么大不了的。