【发布时间】:2016-10-13 23:23:04
【问题描述】:
我有如下依赖图
a.txt <- prereq <- stamp <- dest
其中prereq 和dest 是目标,a.txt 和stamp 是文件。我希望在a.txt 更改时更新戳记。
为此,我有以下 CMakeLists.txt 文件:
cmake_minimum_required(VERSION 3.6)
project(sample)
# variable holding location of stamp and a.txt file
set(STAMP ${CMAKE_CURRENT_SOURCE_DIR}/stamp)
set(ATXT ${CMAKE_CURRENT_SOURCE_DIR}/a.txt)
add_custom_target(
prereq
DEPENDS ${ATXT}
)
add_custom_command(
OUTPUT ${STAMP}
COMMAND ${CMAKE_COMMAND} -E echo "Update stamp."
COMMAND ${CMAKE_COMMAND} -E touch ${STAMP}
DEPENDS prereq
)
add_custom_target(dest ALL DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/stamp)
最初,我有以下文件
$ ls
a.txt
CMakeLists.txt
在第一次运行 cmake 和 make 后,我们得到了预期的行为,
$ cmake .
$ make
[ 0%] Built target prereq
[100%] Generating stamp
Update stamp.
[100%] Built target dest
但是,在触摸a.txt 之后,我希望stamp 会得到更新,但事实并非如此。
$ touch a.txt
$ make
[ 0%] Built target prereq
[100%] Built target dest
这是 cmake 中的错误还是预期的行为?每次prereq变化时如何强制cmake运行touch命令?
【问题讨论】:
标签: cmake dependencies rules