我想在CMake中有一些东西会在我输入make
时执行add_custom_command(
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/build_date.cc
PRE_BUILD
COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/mk_build_date.py
${CMAKE_CURRENT_BINARY_DIR}/build_date.cc
)
add_custom_target(build-date-xxx
ALL
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/build_date.cc)
这就是我目前正在做的事情。遗憾的是,make build-date-xxx
只生成一次文件。
即使没有add_custom_target
声明,文件也只构建一次。
在GNU Make
中结果应该是这样的.PHONY all:
echo "hallo welt"
all: foo.c bar.c
%.c:
touch $@
输入make时,在该makefile中。因为all是第一个目标,所以它总是被调用,并且实际执行自定义命令echo "hallo welt"
。
答案 0 :(得分:1)
尝试使用ADD_CUSTOM_TARGET并在其中使用ALL参数。 然后使主要目标依赖于此自定义目标。
答案 1 :(得分:0)
撤消您的订单...拥有一个生成您的文件的自定义目标没有依赖(无DEPENDS
),并添加依赖于此目标的自定义命令,提及它OUTPUT
是文件,并没有真正做任何事情(例如COMMAND ${CMAKE_COMMAND} -E echo
)。然后在某处提到输出文件(可能是你将它作为库或可执行文件的源)。 (您也可以使用ALL
作为自定义目标,但我假设某些代码对象实际使用了输出文件,因此您希望所述代码对象依赖于输出文件。)
理想情况下,您希望不要修改文件,除非实际发生变化,否则您将无法获得无操作版本。 (如何做到这一点留给读者练习。)