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>参数,系统才会将构建自定义的目标,即构建指令为:

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?