CMake自定义内容
Customize field.
CMake除了内置的一系列指令和规定的可执行文件/库两种构建目标之外,还允许用户定制自己的指令和构建目标,但在实际开发过程中并不常见。
add_custom_target
add_custom_target(Name [ALL] [command1 [args1...]]
[COMMAND command2 [args2...] ...]
[DEPENDS depend depend depend ... ]
[BYPRODUCTS [files...]]
[WORKING_DIRECTORY dir]
[COMMENT comment]
[JOB_POOL job_pool]
[VERBATIM] [USES_TERMINAL]
[COMMAND_EXPAND_LISTS]
[SOURCES src1 [src2...]])ALL:表明该目标会被添加到默认的构建目标,使得它每次都被运行; COMMAND:指定要在构建时执行的命令行; DEPENDS:指定命令所依赖的文件; COMMENT:在构建时执行命令之前显示给定消息; WORKING_DIRECTORY:使用给定的当前工作目录执行命令。如果它是相对路径,它将相对于对应于当前源目录的构建树目录; BYPRODUCTS:指定命令预期产生的文件。
cmake_minimum_required(VERSION 3.10)
project(test)
# 添加一个自定义目标CopyTask
add_custom_target(CopyTask
# 复制文件到指定位置
COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/config ${CMAKE_CURRENT_SOURCE_DIR}/etc
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/log.txt ${CMAKE_CURRENT_SOURCE_DIR}/etc
)假如
CMakeList.txt未指定ALL选项,在构建时需要使用--target <Name>参数,系统才会将构建自定义的目标,即构建指令为:
COMMAND选项支持的操作可以见CMake官方文档:Run a Command-Line Tool
add_custom_command
OUTPUT:指定命令预期产生的输出文件。如果输出文件的名称是相对路径,即相对于当前的构建的源目录路径; COMMAND:指定要在构建时执行的命令行; DEPENDS:指定命令所依赖的文件; COMMENT:在构建时执行命令之前显示给定消息; WORKING_DIRECTORY:使用给定的当前工作目录执行命令。如果它是相对路径,它将相对于对应于当前源目录的构建树目录; DEPFILE:为生成器指定一个.d depfile .d文件保存通常由自定义命令本身发出的依赖关系; MAIN_DEPENDENCY:指定命令的主要输入源文件; BYPRODUCTS:指定命令预期产生的文件。
生成文件
add_custom_target生成一个目标CopyTask,该目标依赖于COPY_RES。而对于COPY_RES而言,它实际上是用来复制文件夹或者复制文件的,也就是COMMAND中定义的操作。
构建事件
为某个目标(如库或可执行程序)添加一个定制命令。
这种定制命令可以设置在,构建这个目标过程中的某些时机。也就是就,这种场景可以在目标构建的过程中,添加一些额外执行的命令。这些命令本身将会成为该目标的一部分。
Last updated
Was this helpful?