文档中的短语
指定命令所依赖的文件。
更好理解为
指定命令输出文件的内容所依赖的文件。
可以猜到,命令的输出文件的内容cp london foo
仅取决于 from london
,因此为 指定选项是合理DEPENDS london
的add_custom_command
。
作为构建系统,CMake 使用 DEPENDS 中的信息来决定是否运行命令。如果:
OUTPUT
文件已在上次运行时创建,并且
- 自上次运行以来,该
DEPENDS
文件尚未更新,
那么该命令将不会再次运行。原因很简单:如果结果是相同的文件,则无需运行该命令。
考虑到 source ( CMAKE_SOURCE_DIR
) 和 build ( CMAKE_BINARY_DIR
) 目录分离,示例可以重写如下:
cmake_minimum_required(VERSION 3.10)
project(Tutorial VERSION 1.0)
add_custom_command(
OUTPUT foo # relative path denotes a file in the build directory
COMMAND cp ${CMAKE_SOURCE_DIR}/london foo # The command will be run from the build directory,
# so need to use absolute path for the file in the source directory
DEPENDS london # relative path is resolved in the source directory,
# assuming that corresponded file is already existed
WORKING_DIRECTORY ${CMAKE_BINARY_DIR} # specifies a directory from which run the COMMAND
# build directory is used by default, so the option can be omitted
COMMENT "I'm testing the new method."
)
add_executable(cake
good.cpp # relative path is resolved in the source directory,
# assuming that corresponded file is already existed
foo # because given file is absent in the source directory,
# the path is resolved relative to the build directory.
)
第一次构建项目时,foo
将构建两者和可执行文件。
第二次构建项目时(不更改london
),不会重建任何内容。
当更改london
文件并再次构建项目时,foo
将重新构建(因为它依赖于london
)。在foo
重建时,可执行文件也将被重建,因为它依赖于foo
.