CMake 教程

参考

VSCode 和 CLion 探索_Liuqz2009的博客-CSDN博客

Ubuntu学习心得——翻译篇——CMake教程(官方文档中文版)

Cmake官方教程解析

CMake Reference Documentation 参考手册

What is the difference between include_directories and target_include_directories in CMake?

CMake的几种Include

cmake 编译Release版本 - YZFHKMS-X - 博客园

cmake重新编译_weixin_30468137的博客-CSDN博客

CMake语法—命令list | 程序员灯塔

cmake 多级目录编译_不是杠杠的博客-CSDN博客_cmake多目录编译

cmake(二十七)Cmake中target再理解_wzj_110的博客-CSDN博客_cmake target

cmake - 标签 - SirDigit - 博客园 cmake手册翻译

cmake:target_** 中的 PUBLIC,PRIVATE,INTERFACE - 知乎


cmake 命令

# 生成项目构建系统  Generate a Project Buildsystem
 cmake [<options>] <path-to-source>
 cmake [<options>] <path-to-existing-build>
 cmake [<options>] -S <path-to-source> -B <path-to-build>

# 编译项目  Build a Project
 cmake --build <dir> [<options>] [-- <build-tool-options>]

# 安装编译后的工程  Install a Project
 cmake --install <dir> [<options>]

# 打开项目  Open a Project
 cmake --open <dir>

# 运行脚本  Run a Script
 cmake [{-D <var>=<value>}...] -P <cmake-script-file>

# 运行cmake内置命令行工具  Run a Command-Line Tool
 cmake -E <command> [<options>]

# 运行Find-Package工具 Run the Find-Package Tool
 cmake --find-package [<options>]

# 查看帮助  View Help
 cmake --help[-<topic>]

生成项目构建系统

 cmake [<options>] <path-to-source>
 cmake [<options>] <path-to-existing-build>
 cmake [<options>] -S <path-to-source> -B <path-to-build>

命令行

源目录

构建目录

cmake src

src

当前目录

cmake build(包含CMakeCache.txt)

从缓存中加载

build

cmake -S src

src

当前目录

cmake -S src build

src

build

cmake -S src -B build

src

build

cmake -B build

当前目录

build

cmake -B build src

src

build

cmake -B build -S src

src

build

cmake -G "Visual Studio 16 2019" -A x64 ../ --fresh

cmake(1) — CMake 3.24.0-rc3 Documentation

编译项目

cmake --build <dir> [<options>] [-- <build-tool-options>]

参数:

--parallel [<jobs>], -j [<jobs>]
    构建时使用的最大并发进程数。如果<jobs>省略,则使用本机构建工具的默认编号。
    这CMAKE_BUILD_PARALLEL_LEVEL如果设置了环境变量,则在未给出此选项时指定默认的并行级别。

--target <tgt>..., -t <tgt>...
    构建<tgt>,取代构建默认目标。可以给出多个目标,用空格分隔。

--config <cfg>
    对于多配置工具,选择配置<cfg>。

--clean-first
    先构建目标clean,然后构建。(仅清洁,使用。)--target clean

常用命令示例:

#windows:
cmake --build . --config Release

#linux:
cmake .. -DCMAKE_BUILD_TYPE=Release

安装编译后的文件

 cmake --install <dir> [<options>]

参数:

--install <dir>
    要安装的项目二进制目录。这是必需的,并且必须是第一个。

--config <cfg>
    对于多配置生成器,请选择配置<cfg>。

--component <comp>
    基于组件的安装。只安装组件<comp>。

--default-directory-permissions <permissions>
默认目录安装权限。格式的权限<u=rwx,g=rx,o=rx>。

--prefix <prefix>
    覆盖安装前缀,CMAKE_INSTALL_PREFIX.

--strip
    安装前精简,去掉调试信息等。

cmake 构建系统 cmake-buildsystem

定义可执行文件:  add_executable() 

定义可执行库: add_library()

定义二进制target的依赖关: target_link_libraries() 

定义共享库类型: BUILD_SHARED_LIBS

CMAKE_CONFIGURATION_TYPES 指定只生成指定的配置

# 只生成 Release 的配置 (多配置的情况下)
cmake ../ -DCMAKE_CONFIGURATION_TYPES=Release

# 生成
cmake --build ./

# 因为只生成了 Release 的配置,所以报错说没有 Debug|x64 的配置
# C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Microsoft\VC\v170\Microsoft.CppBuild.targets(437,5): error MSB8013: 此项目不包含配置和平台组合 Debug|x64。 

# 改成 生成 Release
cmake --build ./ --config Release

# 生成 bin 成功

cmake 命令

cmake命令 分为:
脚本命令(Scripting Commands),
项目命令(Project Commands),
CTest 命令(CTest Commands),
不推荐使用的命令 (Deprecated Commands)

脚本命令(Scripting Commands)

break

break — CMake 3.24.0-rc3 Documentation

# 从 foreach 或 while 循环中跳出
break()

cmake_host_system_information

cmake_host_system_information — CMake 3.24.0-rc3 Documentation

# Query host system specific information
# 查询主机系统特定信息
  cmake_host_system_information(RESULT <variable> QUERY <key> ...)

# Query Windows registry
# 查询 Windows 注册表
  cmake_host_system_information(RESULT <variable> QUERY WINDOWS_REGISTRY <key> ...)


# 1
cmake_host_system_information(RESULT PRETTY_NAME QUERY DISTRIB_PRETTY_NAME)
message(STATUS "${PRETTY_NAME}")

# 2
cmake_host_system_information(RESULT result QUERY WINDOWS_REGISTRY "HKLM")
cmake_host_system_information(RESULT result QUERY WINDOWS_REGISTRY "HKLM/SOFTWARE/Kitware")
cmake_host_system_information(RESULT result QUERY WINDOWS_REGISTRY "HKCU\\SOFTWARE\\Kitware")

cmake_language

cmake_language — CMake 3.24.0-rc3 Documentation

# 1 ##########################################################################
# 调用 CMake 元操作命令
# 调用命令
cmake_language(CALL <command> [<arg>...])

# 示例
set(message_command "message")
cmake_language(CALL ${message_command} STATUS "Hello World!")
# 相当于
message(STATUS "Hello World!")

# 2 ##########################################################################
# 评估代码
cmake_language(EVAL CODE <code>...)


# 3 ##########################################################################
# 延迟调用
cmake_language(DEFER <options>... CALL <command> [<arg>...])

# 示例
cmake_language(DEFER CALL message "${deferred_message}")
cmake_language(DEFER ID_VAR id CALL message "Canceled Message")
cmake_language(DEFER CANCEL_CALL ${id})
message("Immediate Message")
set(deferred_message "Deferred Message")

# 4 ##########################################################################
# 依赖提供者
cmake_language(SET_DEPENDENCY_PROVIDER <command> SUPPORTED_METHODS <methods>...)

cmake_minimum_required

cmake_minimum_required — CMake 3.24.0-rc3 Documentation

# 定义需要的 最低的 cmake 版本
cmake_minimum_required(VERSION <min>[...<policy_max>] [FATAL_ERROR])

# 示例
cmake_minimum_required(VERSION 3.9)

cmake_parse_arguments

cmake_parse_arguments — CMake 3.24.0-rc3 Documentation

# 解析函数或宏参数
cmake_parse_arguments(<prefix> <options> <one_value_keywords>
                      <multi_value_keywords> <args>...)

cmake_parse_arguments(PARSE_ARGV <N> <prefix> <options>
                      <one_value_keywords> <multi_value_keywords>)

cmake_path

cmake_path — CMake 3.24.0-rc3 Documentation

# 该命令处理构建系统(即主机平台)格式的路径,而不是目标系统
# 分解 Decomposition
  cmake_path( GET <path-var> ROOT_NAME <out-var>)
  cmake_path( GET <path-var> ROOT_DIRECTORY <out-var>)
  cmake_path( GET <path-var> ROOT_PATH <out-var>)
  cmake_path( GET <path-var> FILENAME <out-var>)
  cmake_path( GET <path-var> EXTENSION [LAST_ONLY] <out-var>)
  cmake_path( GET <path-var> STEM [LAST_ONLY] <out-var>)
  cmake_path( GET <path-var> RELATIVE_PART <out-var>)
  cmake_path( GET <path-var> PARENT_PATH <out-var>)

# 查询 Query
  cmake_path( HAS_ROOT_NAME <path-var> <out-var>)
  cmake_path( HAS_ROOT_DIRECTORY <path-var> <out-var>)
  cmake_path( HAS_ROOT_PATH <path-var> <out-var>)
  cmake_path( HAS_FILENAME <path-var> <out-var>)
  cmake_path( HAS_EXTENSION <path-var> <out-var>)
  cmake_path( HAS_STEM <path-var> <out-var>)
  cmake_path( HAS_RELATIVE_PART <path-var> <out-var>)
  cmake_path( HAS_PARENT_PATH <path-var> <out-var>)
  cmake_path( IS_ABSOLUTE <path-var> <out-var>)
  cmake_path( IS_RELATIVE <path-var> <out-var>)
  cmake_path( IS_PREFIX <path-var> <input> [NORMALIZE] <out-var>)
  cmake_path(比较<input1> <OP> <input2> <out-var>)

# 修改 Modification
  cmake_path( SET <path-var> [NORMALIZE] <input>)
  cmake_path( APPEND <path-var> [<input>...] [OUTPUT_VARIABLE <out-var>])
  cmake_path( APPEND_STRING <path-var> [<input>...] [OUTPUT_VARIABLE <out-var>])
  cmake_path( REMOVE_FILENAME <path-var> [OUTPUT_VARIABLE <out-var>])
  cmake_path( REPLACE_FILENAME <path-var> <input> [OUTPUT_VARIABLE <out-var>])
  cmake_path( REMOVE_EXTENSION <path-var> [LAST_ONLY] [OUTPUT_VARIABLE <out-var>])
  cmake_path( REPLACE_EXTENSION <path-var> [LAST_ONLY] <input> [OUTPUT_VARIABLE <out-var>])

# 生成 Generation
  cmake_path( NORMAL_PATH <path-var> [OUTPUT_VARIABLE <out-var>])
  cmake_path( RELATIVE_PATH <path-var> [BASE_DIRECTORY <input>] [OUTPUT_VARIABLE <out-var>])
  cmake_path( ABSOLUTE_PATH <path-var> [BASE_DIRECTORY <input>] [NORMALIZE] [OUTPUT_VARIABLE <out-var>])

# 本机转换 Native Conversion
  cmake_path( NATIVE_PATH <path-var> [NORMALIZE] <out-var>)
  cmake_path(转换<输入> TO_CMAKE_PATH_LIST <输出变量> [NORMALIZE])
  cmake_path( CONVERT <input> TO_NATIVE_PATH_LIST <out-var> [NORMALIZE])

# 散列 Hashing
  cmake_path( HASH <path-var> <out-var>)

cmake_policy

cmake_policy — CMake 3.24.0-rc3 Documentation


configure_file

configure_file — CMake 3.24.0-rc3 Documentation

# 将文件复制到另一个位置并修改其内容。

configure_file(<input> <output>
               [NO_SOURCE_PERMISSIONS | USE_SOURCE_PERMISSIONS |
                FILE_PERMISSIONS <permissions>...]
               [COPYONLY] [ESCAPE_QUOTES] [@ONLY]
               [NEWLINE_STYLE [UNIX|DOS|WIN32|LF|CRLF] ])

# 示例 ###############
# 考虑一个包含foo.h.in文件的源代码树:
#cmakedefine FOO_ENABLE
#cmakedefine FOO_STRING "@FOO_STRING@"

# 一个相邻的CMakeLists.txt可以configure_file用来配置标头:
option(FOO_ENABLE "Enable Foo" ON)
if(FOO_ENABLE)
  set(FOO_STRING "foo")
endif()
configure_file(foo.h.in foo.h @ONLY)

# foo.h这将在与此源目录对应的构建目录中创建一个。如果该FOO_ENABLE选项打开,配置文件将包含:
#define FOO_ENABLE
#define FOO_STRING "foo"

# 否则它将包含:
/* #undef FOO_ENABLE */
/* #undef FOO_STRING */

# 然后可以使用include_directories()命令指定输出目录为头文件搜索路径

include_directories(${CMAKE_CURRENT_BINARY_DIR})

# 以便源可以将标头包含为 #include <foo.h>

continue

continue — CMake 3.24.0-rc3 Documentation

continue()

else

else — CMake 3.24.0-rc3 Documentation

else([<condition>])

elseif

elseif — CMake 3.24.0-rc3 Documentation

elseif(<condition>)

endforeach

endforeach — CMake 3.24.0-rc3 Documentation

endforeach([<loop_var>])

endfunction

endfunction — CMake 3.24.0-rc3 Documentation

endfunction([<name>])

endif

endif — CMake 3.24.0-rc3 Documentation

endif([<condition>])

endmacro

endmacro — CMake 3.24.0-rc3 Documentation

endmacro([<name>])

endwhile

endwhile — CMake 3.24.0-rc3 Documentation

endwhile([<condition>])

execute_process

execute_process — CMake 3.24.0-rc3 Documentation

# 执行一个或多个子进程。

execute_process(COMMAND <cmd1> [<arguments>]
                [COMMAND <cmd2> [<arguments>]]...
                [WORKING_DIRECTORY <directory>]
                [TIMEOUT <seconds>]
                [RESULT_VARIABLE <variable>]
                [RESULTS_VARIABLE <variable>]
                [OUTPUT_VARIABLE <variable>]
                [ERROR_VARIABLE <variable>]
                [INPUT_FILE <file>]
                [OUTPUT_FILE <file>]
                [ERROR_FILE <file>]
                [OUTPUT_QUIET]
                [ERROR_QUIET]
                [COMMAND_ECHO <where>]
                [OUTPUT_STRIP_TRAILING_WHITESPACE]
                [ERROR_STRIP_TRAILING_WHITESPACE]
                [ENCODING <name>]
                [ECHO_OUTPUT_VARIABLE]
                [ECHO_ERROR_VARIABLE]
                [COMMAND_ERROR_IS_FATAL <ANY|LAST>])

file

file — CMake 3.24.0-rc3 Documentation

# 文件操作命令
# 此命令专用于需要访问文件系统的文件和路径操作
# Reading  读取
  file(READ <filename> <out-var> [...])
  file(STRINGS <filename> <out-var> [...])
  file(<HASH> <filename> <out-var>)
  file(TIMESTAMP <filename> <out-var> [...])
  file(GET_RUNTIME_DEPENDENCIES [...])

# Writing  写入
  file({WRITE | APPEND} <filename> <content>...)
  file({TOUCH | TOUCH_NOCREATE} [<file>...])
  file(GENERATE OUTPUT <output-file> [...])
  file(CONFIGURE OUTPUT <output-file> CONTENT <content> [...])

# Filesystem  文件系统
  file({GLOB | GLOB_RECURSE} <out-var> [...] [<globbing-expr>...])
  file(MAKE_DIRECTORY [<dir>...])
  file({REMOVE | REMOVE_RECURSE } [<files>...])
  file(RENAME <oldname> <newname> [...])
  file(COPY_FILE <oldname> <newname> [...])
  file({COPY | INSTALL} <file>... DESTINATION <dir> [...])
  file(SIZE <filename> <out-var>)
  file(READ_SYMLINK <linkname> <out-var>)
  file(CREATE_LINK <original> <linkname> [...])
  file(CHMOD <files>... <directories>... PERMISSIONS <permissions>... [...])
  file(CHMOD_RECURSE <files>... <directories>... PERMISSIONS <permissions>... [...])

# Path Conversion  路径转换
  file(REAL_PATH <path> <out-var> [BASE_DIRECTORY <dir>] [EXPAND_TILDE])
  file(RELATIVE_PATH <out-var> <directory> <file>)
  file({TO_CMAKE_PATH | TO_NATIVE_PATH} <path> <out-var>)

# Transfer  传输
  file(DOWNLOAD <url> [<file>] [...])
  file(UPLOAD <file> <url> [...])

# Locking  锁定
  file(LOCK <path> [...])

# Archiving  归档
  file(ARCHIVE_CREATE OUTPUT <archive> PATHS <paths>... [...])
  file(ARCHIVE_EXTRACT INPUT <archive> [...])

find_file

find_file — CMake 3.24.0-rc3 Documentation

# 此命令用于查找命名文件的完整路径
# 速记签名是:

find_file (<VAR> name1 [path1 path2 ...])

find_file (
          <VAR>
          name | NAMES name1 [name2 ...]
          [HINTS [path | ENV var]... ]
          [PATHS [path | ENV var]... ]
          [REGISTRY_VIEW (64|32|64_32|32_64|HOST|TARGET|BOTH)]
          [PATH_SUFFIXES suffix1 [suffix2 ...]]
          [DOC "cache documentation string"]
          [NO_CACHE]
          [REQUIRED]
          [NO_DEFAULT_PATH]
          [NO_PACKAGE_ROOT_PATH]
          [NO_CMAKE_PATH]
          [NO_CMAKE_ENVIRONMENT_PATH]
          [NO_SYSTEM_ENVIRONMENT_PATH]
          [NO_CMAKE_SYSTEM_PATH]
          [NO_CMAKE_INSTALL_PREFIX]
          [CMAKE_FIND_ROOT_PATH_BOTH |
           ONLY_CMAKE_FIND_ROOT_PATH |
           NO_CMAKE_FIND_ROOT_PATH]
         )

find_library

find_library — CMake 3.24.0-rc3 Documentation

#速记签名是
find_library (<VAR> name1 [path1 path2 ...])

# 该命令用于查找库
find_library (
          <VAR>
          name | NAMES name1 [name2 ...] [NAMES_PER_DIR]
          [HINTS [path | ENV var]... ]
          [PATHS [path | ENV var]... ]
          [REGISTRY_VIEW (64|32|64_32|32_64|HOST|TARGET|BOTH)]
          [PATH_SUFFIXES suffix1 [suffix2 ...]]
          [DOC "cache documentation string"]
          [NO_CACHE]
          [REQUIRED]
          [NO_DEFAULT_PATH]
          [NO_PACKAGE_ROOT_PATH]
          [NO_CMAKE_PATH]
          [NO_CMAKE_ENVIRONMENT_PATH]
          [NO_SYSTEM_ENVIRONMENT_PATH]
          [NO_CMAKE_SYSTEM_PATH]
          [NO_CMAKE_INSTALL_PREFIX]
          [CMAKE_FIND_ROOT_PATH_BOTH |
           ONLY_CMAKE_FIND_ROOT_PATH |
           NO_CMAKE_FIND_ROOT_PATH]
         )

#  如果指定NO_CACHE,则查找结果缓存到变量VAR中,否则存放在缓存条目中。如果什么都没找到,结果将是<VAR>-NOTFOUND

find_package

find_package — CMake 3.24.0-rc3 Documentation

CMake的find_package指令详解 - 知乎

# 查找包
# 基本用法
find_package(<PackageName> [version] [EXACT] [QUIET] [MODULE]
             [REQUIRED] [[COMPONENTS] [components...]]
             [OPTIONAL_COMPONENTS components...]
             [REGISTRY_VIEW  (64|32|64_32|32_64|HOST|TARGET|BOTH)]
             [NO_POLICY_SCOPE]
             [GLOBAL])


# 完全用法
find_package(<PackageName> [version] [EXACT] [QUIET]
             [REQUIRED] [[COMPONENTS] [components...]]
             [OPTIONAL_COMPONENTS components...]
             [CONFIG|NO_MODULE]
             [NO_POLICY_SCOPE]
             [GLOBAL]
             [NAMES name1 [name2 ...]]
             [CONFIGS config1 [config2 ...]]
             [HINTS path1 [path2 ... ]]
             [PATHS path1 [path2 ... ]]
             [REGISTRY_VIEW  (64|32|64_32|32_64|HOST|TARGET|BOTH)]
             [PATH_SUFFIXES suffix1 [suffix2 ...]]
             [NO_DEFAULT_PATH]
             [NO_PACKAGE_ROOT_PATH]
             [NO_CMAKE_PATH]
             [NO_CMAKE_ENVIRONMENT_PATH]
             [NO_SYSTEM_ENVIRONMENT_PATH]
             [NO_CMAKE_PACKAGE_REGISTRY]
             [NO_CMAKE_BUILDS_PATH] # Deprecated; does nothing.
             [NO_CMAKE_SYSTEM_PATH]
             [NO_CMAKE_INSTALL_PREFIX]
             [NO_CMAKE_SYSTEM_PACKAGE_REGISTRY]
             [CMAKE_FIND_ROOT_PATH_BOTH |
              ONLY_CMAKE_FIND_ROOT_PATH |
              NO_CMAKE_FIND_ROOT_PATH])

CMake 为包构造了一组可能的安装前缀。在每个前缀下搜索几个目录以查找配置文件。下表显示了搜索的目录。每个条目都适用于遵循 Windows ( W)、UNIX ( U) 或 Apple ( A) 约定的安装树:

<prefix>/                                                       (W)
<prefix>/(cmake|CMake)/                                         (W)
<prefix>/<name>*/                                               (W)
<prefix>/<name>*/(cmake|CMake)/                                 (W)
<prefix>/(lib/<arch>|lib*|share)/cmake/<name>*/                 (U)
<prefix>/(lib/<arch>|lib*|share)/<name>*/                       (U)
<prefix>/(lib/<arch>|lib*|share)/<name>*/(cmake|CMake)/         (U)
<prefix>/<name>*/(lib/<arch>|lib*|share)/cmake/<name>*/         (W/U)
<prefix>/<name>*/(lib/<arch>|lib*|share)/<name>*/               (W/U)
<prefix>/<name>*/(lib/<arch>|lib*|share)/<name>*/(cmake|CMake)/ (W/U)

在支持 macOS 的系统上FRAMEWORKBUNDLE,在以下目录中搜索包含配置文件的框架或应用程序包:

<prefix>/<name>.framework/Resources/                    (A)
<prefix>/<name>.framework/Resources/CMake/              (A)
<prefix>/<name>.framework/Versions/*/Resources/         (A)
<prefix>/<name>.framework/Versions/*/Resources/CMake/   (A)
<prefix>/<name>.app/Contents/Resources/                 (A)
<prefix>/<name>.app/Contents/Resources/CMake/           (A)

在所有情况下<name>都被视为不区分大小写并对应于任何指定的名称(<PackageName>或由 给出的名称NAMES)。

如果lib/<arch>CMAKE_LIBRARY_ARCHITECTURE变量已设置。包括一个或lib*多个值lib64lib32或(按该顺序搜索)。libx32lib

find_path

find_path — CMake 3.24.0-rc3 Documentation

# 速记用法
find_path (<VAR> name1 [path1 path2 ...])

# 通用用法
find_path (
          <VAR>
          name | NAMES name1 [name2 ...]
          [HINTS [path | ENV var]... ]
          [PATHS [path | ENV var]... ]
          [REGISTRY_VIEW (64|32|64_32|32_64|HOST|TARGET|BOTH)]
          [PATH_SUFFIXES suffix1 [suffix2 ...]]
          [DOC "cache documentation string"]
          [NO_CACHE]
          [REQUIRED]
          [NO_DEFAULT_PATH]
          [NO_PACKAGE_ROOT_PATH]
          [NO_CMAKE_PATH]
          [NO_CMAKE_ENVIRONMENT_PATH]
          [NO_SYSTEM_ENVIRONMENT_PATH]
          [NO_CMAKE_SYSTEM_PATH]
          [NO_CMAKE_INSTALL_PREFIX]
          [CMAKE_FIND_ROOT_PATH_BOTH |
           ONLY_CMAKE_FIND_ROOT_PATH |
           NO_CMAKE_FIND_ROOT_PATH]
         )

# 此命令用于查找包含命名文件的目录,如果指定NO_CACHE,则查找结果缓存到变量VAR中,否则存放在缓存条目中。如果什么都没找到,结果将是<VAR>-NOTFOUND


find_program

find_program — CMake 3.24.0-rc3 Documentation

# 该命令用于查找程序
# 速记用法
find_program (<VAR> name1 [path1 path2 ...])

# 通用用法
find_program (
          <VAR>
          name | NAMES name1 [name2 ...] [NAMES_PER_DIR]
          [HINTS [path | ENV var]... ]
          [PATHS [path | ENV var]... ]
          [REGISTRY_VIEW (64|32|64_32|32_64|HOST|TARGET|BOTH)]
          [PATH_SUFFIXES suffix1 [suffix2 ...]]
          [DOC "cache documentation string"]
          [NO_CACHE]
          [REQUIRED]
          [NO_DEFAULT_PATH]
          [NO_PACKAGE_ROOT_PATH]
          [NO_CMAKE_PATH]
          [NO_CMAKE_ENVIRONMENT_PATH]
          [NO_SYSTEM_ENVIRONMENT_PATH]
          [NO_CMAKE_SYSTEM_PATH]
          [NO_CMAKE_INSTALL_PREFIX]
          [CMAKE_FIND_ROOT_PATH_BOTH |
           ONLY_CMAKE_FIND_ROOT_PATH |
           NO_CMAKE_FIND_ROOT_PATH]
         )

# 该命令用于查找程序,如果指定NO_CACHE,则查找结果缓存到变量VAR中,否则存放在缓存条目中。如果什么都没找到,结果将是<VAR>-NOTFOUND


foreach

foreach — CMake 3.24.0-rc3 Documentation

foreach(<loop_var> <items>)
  <commands>
endforeach()

foreach(<loop_var> RANGE <stop>)

foreach(<loop_var> RANGE <start> <stop> [<step>])

foreach(<loop_var> IN [LISTS [<lists>]] [ITEMS [<items>]])

foreach(<loop_var>... IN ZIP_LISTS <lists>)

#############################################################
set(A 0;1)
set(B 2 3)
set(C "4 5")
set(D 6;7 8)
set(E "")
foreach(X IN LISTS A B C D E)
    message(STATUS "X=${X}")
endforeach()

# 输出:
-- X=0
-- X=1
-- X=2
-- X=3
-- X=4 5
-- X=6
-- X=7
-- X=8


function

function — CMake 3.24.0-rc3 Documentation

function(<name> [<arg1> ...])
  <commands>
endfunction()


get_cmake_property

get_cmake_property — CMake 3.24.0-rc3 Documentation

get_cmake_property(<var> <property>)

#从 CMake 实例获取全局属性。把<property>的值存储在变量<var>中。如果未找到该属性,<var>将设置为NOTFOUND。


get_directory_property

get_directory_property — CMake 3.24.0-rc3 Documentation

get_directory_property(<variable> [DIRECTORY <dir>] <prop-name>)

get_directory_property(<variable> [DIRECTORY <dir>]
                       DEFINITION <var-name>)

# 将目录范围的属性存储在<variable>变量中


get_filename_component

# 获取完整文件名的特定组成部分
get_filename_component(<var> <FileName> <mode> [CACHE])

get_filename_component(<var> <FileName> <mode> [BASE_DIR <dir>] [CACHE])

get_filename_component(<var> <FileName> PROGRAM [PROGRAM_ARGS <arg_var>] [CACHE])

# 在 3.20 版更改:此命令已被cmake_path()命令取代


get_property

get_property — CMake 3.24.0-rc3 Documentation

# 从范围内的一个对象中获取一个属性
get_property(<variable>
             <GLOBAL             |
              DIRECTORY [<dir>]  |
              TARGET    <target> |
              SOURCE    <source>
                        [DIRECTORY <dir> | TARGET_DIRECTORY <target>] |
              INSTALL   <file>   |
              TEST      <test>   |
              CACHE     <entry>  |
              VARIABLE           >
             PROPERTY <name>
             [SET | DEFINED | BRIEF_DOCS | FULL_DOCS])


if

if — CMake 3.24.0-rc3 Documentation

# 语法
if(<condition>)
  <commands>
elseif(<condition>) # optional block, can be repeated
  <commands>
else()              # optional block
  <commands>
endif()

# 基本表达式
if(<constant>)
if(<variable>)
if(<string>)

# 逻辑运算符
if(NOT <condition>)
if(<cond1> AND <cond2>)
if(<cond1> OR <cond2>)
if((condition) AND (condition OR (condition)))

# 存在性检查
if(COMMAND command-name)
if(POLICY policy-id)
if(TARGET target-name)
if(TEST test-name)
if(DEFINED <name>|CACHE{<name>}|ENV{<name>})
if(<variable|string> IN_LIST <variable>)

# 文件操作
if(EXISTS path-to-file-or-directory)
if(file1 IS_NEWER_THAN file2)
if(IS_DIRECTORY path-to-directory)
if(IS_SYMLINK file-name)
if(IS_ABSOLUTE path)

# Comparisons
if(<variable|string> MATCHES regex)
if(<variable|string> LESS <variable|string>)
if(<variable|string> GREATER <variable|string>)
if(<variable|string> EQUAL <variable|string>)
if(<variable|string> LESS_EQUAL <variable|string>)
if(<variable|string> GREATER_EQUAL <variable|string>)
if(<variable|string> STRLESS <variable|string>)
if(<variable|string> STRGREATER <variable|string>)
if(<variable|string> STREQUAL <variable|string>)
if(<variable|string> STRLESS_EQUAL <variable|string>)
if(<variable|string> STRGREATER_EQUAL <variable|string>)

# 版本比较
if(<variable|string> VERSION_LESS <variable|string>)
if(<variable|string> VERSION_GREATER <variable|string>)
if(<variable|string> VERSION_EQUAL <variable|string>)
if(<variable|string> VERSION_LESS_EQUAL <variable|string>)
if(<variable|string> VERSION_GREATER_EQUAL <variable|string>)

# 路径比较
if(<variable|string> PATH_EQUAL <variable|string>)


include

include — CMake 3.24.0-rc3 Documentation

# 从文件或模块加载并运行 CMake 代码
include(<file|module> [OPTIONAL] [RESULT_VARIABLE <var>]
                      [NO_POLICY_SCOPE])


include_guard

include_guard — CMake 3.24.0-rc3 Documentation

# 为 CMake 当前正在处理的文件提供包含保护
include_guard([DIRECTORY|GLOBAL])


list

list — CMake 3.24.0-rc3 Documentation

CMake语法—命令list | 程序员灯塔

Reading
  list(LENGTH <list> <out-var>)
  list(GET <list> <element index> [<index> ...] <out-var>)
  list(JOIN <list> <glue> <out-var>)
  list(SUBLIST <list> <begin> <length> <out-var>)

Search
  list(FIND <list> <value> <out-var>)

Modification
  list(APPEND <list> [<element>...])
  list(FILTER <list> {INCLUDE | EXCLUDE} REGEX <regex>)
  list(INSERT <list> <index> [<element>...])
  list(POP_BACK <list> [<out-var>...])
  list(POP_FRONT <list> [<out-var>...])
  list(PREPEND <list> [<element>...])
  list(REMOVE_ITEM <list> <value>...)
  list(REMOVE_AT <list> <index>...)
  list(REMOVE_DUPLICATES <list>)
  list(TRANSFORM <list> <ACTION> [...])

Ordering
  list(REVERSE <list>)
  list(SORT <list> [...])


macro

macro — CMake 3.24.0-rc3 Documentation

# 开始录制宏以供以后作为命令调用
macro(<name> [<arg1> ...])
  <commands>
endmacro()


mark_as_advanced

mark_as_advanced — CMake 3.24.0-rc3 Documentation

# 将 cmake 缓存变量标记为高级
mark_as_advanced([CLEAR|FORCE] <var1> ...)


math

math — CMake 3.24.0-rc3 Documentation

# 评估一个数学表达式
math(EXPR <variable> "<expression>" [OUTPUT_FORMAT <format>])

# 示例
math(EXPR value "100 * 0xA" OUTPUT_FORMAT DECIMAL)      # value is set to "1000"
math(EXPR value "100 * 0xA" OUTPUT_FORMAT HEXADECIMAL)  # value is set to "0x3e8"


message

message — CMake 3.24.0-rc3 Documentation

# 一般信息  General messages  
  message([<mode>] "message text" ...)

# 报告检查  Reporting checks
  message(<checkState> "message text" ...)

# 可选项 mode
# FATAL_ERROR  
#     CMake 错误,停止处理和生成
# SEND_ERROR  
#     CMake 错误,继续处理,但跳过生成
# WARNING 
#     CMake 警告,继续处理
# AUTHOR_WARNING
#     CMake 警告(开发),继续处理
# DEPRECATION
#     CMake 弃用错误或警告
# (无)或NOTICE
#     打印到 stderr 以吸引用户注意的重要消息
# STATUS
#     项目用户可能感兴趣的主要有趣信息
# VERBOSE
#     针对项目用户的详细信息消息
# DEBUG
#     详细的信息消息旨在为项目本身的开发人员而不是只想构建它的用户提供
# TRACE
#     具有非常低级实现细节的细粒度消息


option

option — CMake 3.24.0-rc3 Documentation

# 提供布尔选项给用户选择
option(<variable> "<help_text>" [value])

# 如果<value>没有提供初始值,则布尔值默认值是OFF。如果<variable>通过普通或缓存变量进行了设置,则该命令不执行任何操作


return

return — CMake 3.24.0-rc3 Documentation

return()


separate_arguments

separate_arguments — CMake 3.24.0-rc3 Documentation

# 将命令行参数解析为分号分隔的列表
# 将空格分隔的字符串解析<args>为项目列表,并将此列表以分号分隔的标准格式存储在<variable>
separate_arguments(<variable> <mode> [PROGRAM [SEPARATE_ARGS]] <args>)

# mode 可取 UNIX_COMMAND, WINDOWS_COMMAND, NATIVE_COMMAND




# 示例
separate_arguments (out UNIX_COMMAND PROGRAM "cc -c main.c")
# out值 /path/to/cc;-c main.c

separate_arguments (out UNIX_COMMAND PROGRAM SEPARATE_ARGS "cc -c main.c")
# out值 /path/to/cc;-c;main.c


set

set — CMake 3.24.0-rc3 Documentation

Cmake命令之set介绍 - 百度文库

cmake命令之set_物随心转的博客-CSDN博客_cmake set命令

# 设置普通变量  Set Normal Variable
set(<variable> <value>... [PARENT_SCOPE])


# 设置缓存条目  Set Cache Entry
set(<variable> <value>... CACHE <type> <docstring> [FORCE])

# <type>
# BOOL
#    布尔ON/OFF值。 cmake-gui(1)提供一个复选框。
# FILEPATH
#    磁盘上文件的路径。 cmake-gui(1)提供文件对话框。
# PATH
#    磁盘上目录的路径。 cmake-gui(1)提供文件对话框。
# STRING
#    一行文字。 cmake-gui(1)如果STRINGS缓存条目属性已设置。
# INTERNAL
#    一行文字。 cmake-gui(1)不显示内部条目。它们可用于跨运行持久存储变量。使用这种类型意味着FORCE.


# 设置环境变量  Set Environment Variable
set(ENV{<variable>} [<value>])

# 使用 $ENV{<variable>} 引用此环境变量


set_directory_properties

set_directory_properties — CMake 3.24.0-rc3 Documentation

# 设置当前目录和子目录的属性
set_directory_properties(PROPERTIES prop1 value1 [prop2 value2] ...)

# 以键值对的形式设置当前目录及其子目录的属性


set_property

set_property — CMake 3.24.0-rc3 Documentation

# 在给定范围内设置命名属性
set_property(<GLOBAL                      |
              DIRECTORY [<dir>]           |
              TARGET    [<target1> ...]   |
              SOURCE    [<src1> ...]
                        [DIRECTORY <dirs> ...]
                        [TARGET_DIRECTORY <targets> ...] |
              INSTALL   [<file1> ...]     |
              TEST      [<test1> ...]     |
              CACHE     [<entry1> ...]    >
             [APPEND] [APPEND_STRING]
             PROPERTY <name> [<value1> ...])


site_name

site_name — CMake 3.24.0-rc3 Documentation

# 将给定变量设置为计算机的名称
site_name(variable)


string

string — CMake 3.24.0-rc3 Documentation

# 字符串操作
# 搜索和替换  Search and Replace
  string(FIND <string> <substring> <out-var> [...])
  string(REPLACE <match-string> <replace-string> <out-var> <input>...)
  string(REGEX MATCH <match-regex> <out-var> <input>...)
  string(REGEX MATCHALL <match-regex> <out-var> <input>...)
  string(REGEX REPLACE <match-regex> <replace-expr> <out-var> <input>...)

# 操作  Manipulation
  string(APPEND <string-var> [<input>...])
  string(PREPEND <string-var> [<input>...])
  string(CONCAT <out-var> [<input>...])
  string(JOIN <glue> <out-var> [<input>...])
  string(TOLOWER <string> <out-var>)
  string(TOUPPER <string> <out-var>)
  string(LENGTH <string> <out-var>)
  string(SUBSTRING <string> <begin> <length> <out-var>)
  string(STRIP <string> <out-var>)
  string(GENEX_STRIP <string> <out-var>)
  string(REPEAT <string> <count> <out-var>)

# 比较  Comparison
  string(COMPARE <op> <string1> <string2> <out-var>)

# 哈希  Hashing
  string(<HASH> <out-var> <input>)

# 生成  Generation
  string(ASCII <number>... <out-var>)
  string(HEX <string> <out-var>)
  string(CONFIGURE <string> <out-var> [...])
  string(MAKE_C_IDENTIFIER <string> <out-var>)
  string(RANDOM [<option>...] <out-var>)
  string(TIMESTAMP <out-var> [<format string>] [UTC])
  string(UUID <out-var> ...)

# JSON
  string(JSON <out-var> [ERROR_VARIABLE <error-var>]
         {GET | TYPE | LENGTH | REMOVE}
         <json-string> <member|index> [<member|index> ...])
  string(JSON <out-var> [ERROR_VARIABLE <error-var>]
         MEMBER <json-string>
         [<member|index> ...] <index>)
  string(JSON <out-var> [ERROR_VARIABLE <error-var>]
         SET <json-string>
         <member|index> [<member|index> ...] <value>)
  string(JSON <out-var> [ERROR_VARIABLE <error-var>]
         EQUAL <json-string1> <json-string2>)


unset

unset — CMake 3.24.0-rc3 Documentation

# 取消设置普通变量或缓存条目
# Unset Normal Variable or Cache Entry
unset(<variable> [CACHE | PARENT_SCOPE])


# 取消设置环境变量
# Unset Environment Variable
unset(ENV{<variable>})


variable_watch

variable_watch — CMake 3.24.0-rc3 Documentation

# 观察 CMake 变量的变化
variable_watch(<variable> [<command>])

# 如果指定的<variable>更改并且没有<command>给出,将打印一条消息以通知更改。
# 如果<command>给出,则将执行此命令。该命令将接收以下参数: COMMAND(<variable> <access> <value> <current_list_file> <stack>)


while

while — CMake 3.24.0-rc3 Documentation

while(<condition>)
  <commands>
endwhile()

项目命令(Project Commands)

add_compile_definitions

add_compile_definitions — CMake 3.24.0-rc3 Documentation

cmake(13):构建时设置预处理宏定义以及add_compile_definitions命令详解_翔底的博客-CSDN博客_cmake预定义宏

CMAKE语法:add_definitions、add_compile_options_持续学习,不断沉淀的博客-CSDN博客_add_compile_options

cmake的四个命令:add_compile_options、add_definitions、target_compile_definitions、build_command - DoubleLi - 博客园

# 将预处理器定义添加到源文件的编译中
# 为当前路径以及下层路径的目标加入编译定义
add_compile_definitions(<definition> ...)

# 示例 
# add_definitions 推荐使用 add_compile_definitions 替代
add_definitions (-DCOMPILE_M1)
add_definitions (-DCOMPILE_M2=0x100)
 
add_compile_definitions (COMPILE_M3=0x200)
 
if(COMPILE_M4)
    add_compile_definitions (COMPILE_M4)
endif()
 


add_compile_options

add_compile_options — CMake 3.24.0-rc3 Documentation

# 为源文件的添加编译选项
add_compile_options(<option> ...)

# 示例
if (MSVC)
    # warning level 4 and all warnings as errors
    add_compile_options(/W4 /WX)
else()
    # lots of warnings and all warnings as errors
    add_compile_options(-Wall -Wextra -pedantic -Werror)
endif()

add_custom_command

add_custom_command — CMake 3.24.0-rc3 Documentation

# 将自定义构建规则添加到生成的构建系统
# 生成文件
add_custom_command(OUTPUT output1 [output2 ...]
                   COMMAND command1 [ARGS] [args1...]
                   [COMMAND command2 [ARGS] [args2...] ...]
                   [MAIN_DEPENDENCY depend]
                   [DEPENDS [depends...]]
                   [BYPRODUCTS [files...]]
                   [IMPLICIT_DEPENDS <lang1> depend1
                                    [<lang2> depend2] ...]
                   [WORKING_DIRECTORY dir]
                   [COMMENT comment]
                   [DEPFILE depfile]
                   [JOB_POOL job_pool]
                   [VERBATIM] [APPEND] [USES_TERMINAL]
                   [COMMAND_EXPAND_LISTS])

# 示例:生成文件
# 自定义命令可用于生成源文件。例如,代码:

add_custom_command(
  OUTPUT out.c
  COMMAND someTool -i ${CMAKE_CURRENT_SOURCE_DIR}/in.txt
                   -o out.c
  DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/in.txt
  VERBATIM)
add_library(myLib out.c)



# 构建事件
# 第二个签名将自定义命令添加到库或可执行文件等目标。这对于在构建目标之前或之后执行操作很有用。该命令成为目标的一部分,并且只会在构建目标本身时执行。如果目标已经构建,该命令将不会执行。

add_custom_command(TARGET <target>
                   PRE_BUILD | PRE_LINK | POST_BUILD
                   COMMAND command1 [ARGS] [args1...]
                   [COMMAND command2 [ARGS] [args2...] ...]
                   [BYPRODUCTS [files...]]
                   [WORKING_DIRECTORY dir]
                   [COMMENT comment]
                   [VERBATIM] [USES_TERMINAL]
                   [COMMAND_EXPAND_LISTS])

# 示例:构建事件
# 一个POST_BUILD事件可用于在链接后对二进制文件进行后处理。例如,代码:

add_executable(myExe myExe.c)
add_custom_command(
  TARGET myExe POST_BUILD
  COMMAND someHasher -i "$<TARGET_FILE:myExe>"
                     -o "$<TARGET_FILE:myExe>.hash"
  VERBATIM)


add_custom_target

add_custom_target — CMake 3.24.0-rc3 Documentation

# 添加一个没有输出的目标,以便始终构建它
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...]])


add_definitions

add_definitions — CMake 3.24.0-rc3 Documentation

# 将 -D 定义标志添加到源文件的编译中
add_definitions(-DFOO -DBAR ...)

# 注意 此命令已被替代命令取代:
#    利用add_compile_definitions()添加预处理器定义。
#    利用include_directories()添加包含目录。
#    利用add_compile_options()添加其他选项


add_dependencies

add_dependencies — CMake 3.24.0-rc3 Documentation

# 在顶级目标之间添加依赖关系。

add_dependencies(<target> [<target-dependency>]...)


add_executable

add_executable — CMake 3.24.0-rc3 Documentation

# 普通的可执行文件
# Normal Executables
add_executable(<name> [WIN32] [MACOSX_BUNDLE]
               [EXCLUDE_FROM_ALL]
               [source1] [source2 ...])


# 导入的可执行文件
# Imported Executables
add_executable(<name> IMPORTED [GLOBAL])


# 给可执行文件创建一个别名
# Alias Executables
add_executable(<name> ALIAS <target>)


add_library

add_library — CMake 3.24.0-rc3 Documentation

https://www.csdn.net/tags/NtzaQgzsOTQ3MTAtYmxvZwO0O0OO0O0O.html

cmake : add_library详解_lainegates的博客-CSDN博客_add_library

# 普通库
# Normal Libraries
add_library(<name> [STATIC | SHARED | MODULE]
            [EXCLUDE_FROM_ALL]
            [<source>...])


# 对象库
# Object Libraries
add_library(<name> OBJECT [<source>...])


# 接口库
# Interface Libraries
add_library(<name> INTERFACE)


# 导入的库
# Imported Libraries
add_library(<name> <type> IMPORTED [GLOBAL])


# 别名库
# Alias Libraries
add_library(<name> ALIAS <target>)


add_link_options

add_link_options — CMake 3.24.0-rc3 Documentation

# 为当前目录及以下目录中的可执行文件、共享库或模块库目标的链接步骤添加选项,这些选项是在调用此命令后添加的
add_link_options(<option> ...)


add_subdirectory

add_subdirectory — CMake 3.24.0-rc3 Documentation

# 将子目录添加到构建。

add_subdirectory(source_dir [binary_dir] [EXCLUDE_FROM_ALL])


add_test

add_test — CMake 3.24.0-rc3 Documentation

add_test(NAME <name> COMMAND <command> [<arg>...]
         [CONFIGURATIONS <config>...]
         [WORKING_DIRECTORY <dir>]
         [COMMAND_EXPAND_LISTS])


aux_source_directory

aux_source_directory — CMake 3.24.0-rc3 Documentation

# 查找目录中的所有源文件。

aux_source_directory(<dir> <variable>)


build_command
create_test_sourcelist
define_property


enable_language

enable_language — CMake 3.24.0-rc3 Documentation

# 启用一种语言(CXX/C/OBJC/OBJCXX/Fortran/等)

enable_language(<lang> [OPTIONAL] )


enable_testing

enable_testing — CMake 3.24.0-rc3 Documentation

# 启用当前目录及以下目录的测试。

enable_testing()


export
fltk_wrap_ui
get_source_file_property
get_target_property
get_test_property


include_directories

include_directories — CMake 3.24.0-rc3 Documentation

# 为项目构建添加头文件搜索目录

include_directories([AFTER|BEFORE] [SYSTEM] dir1 [dir2 ...])

# 搜索目录添加到属性  INCLUDE_DIRECTORIES 中


include_external_msproject
include_regular_expression


install

install — CMake 3.24.0-rc3 Documentation

install(TARGETS <target>... [...])
install(IMPORTED_RUNTIME_ARTIFACTS <target>... [...])
install({FILES | PROGRAMS} <file>... [...])
install(DIRECTORY <dir>... [...])
install(SCRIPT <file> [...])
install(CODE <code> [...])
install(EXPORT <export-name> [...])
install(RUNTIME_DEPENDENCY_SET <set-name> [...])


# 示例
install(TARGETS MathFunctions DESTINATION lib)
install(FILES MathFunctions.h DESTINATION include)

install(TARGETS Tutorial DESTINATION bin)
install(FILES "${PROJECT_BINARY_DIR}/TutorialConfig.h"
  DESTINATION include
  )


link_directories

link_directories — CMake 3.24.0-rc3 Documentation

# 添加目录到链接器搜索库的目录中。

link_directories([AFTER|BEFORE] directory1 [directory2 ...])

目录会设置到 LINK_DIRECTORIES 属性中


link_libraries

link_libraries — CMake 3.24.0-rc3 Documentation

target_link_libraries 和link_libraries区别_日作诗歌三千首的博客-CSDN博客_target_link_libraries

# 将库链接到以后添加的所有目标。

link_libraries([item1 [item2 [...]]]
               [[debug|optimized|general] <item>] ...)


load_cache


project

project — CMake 3.24.0-rc3 Documentation

# 设置项目的名称
project(<PROJECT-NAME> [<language-name>...])
project(<PROJECT-NAME>
        [VERSION <major>[.<minor>[.<patch>[.<tweak>]]]]
        [DESCRIPTION <project-description-string>]
        [HOMEPAGE_URL <url-string>]
        [LANGUAGES <language-name>...])


# 示例
project(nlohmann_json VERSION 3.10.5 LANGUAGES CXX)


remove_definitions

remove_definitions — CMake 3.24.0-rc3 Documentation

# 删除由 -D 添加的变量

remove_definitions(-DFOO -DBAR ...)

# 见 add_definitions()


set_source_files_properties
set_target_properties
set_tests_properties
source_group


target_compile_definitions

target_compile_definitions — CMake 3.24.0-rc3 Documentation

target_compile_definitions(<target>
  <INTERFACE|PUBLIC|PRIVATE> [items1...]
  [<INTERFACE|PUBLIC|PRIVATE> [items2...] ...])

# PRIVATE 和 PUBLIC items 会设置到<target>的 COMPILE_DEFINITIONS 属性中. 
# PUBLIC 和 INTERFACE items 会设置到<target>的 INTERFACE_COMPILE_DEFINITIONS 属性中.


# 项目上的任何前导-D都将被删除。空项目被忽略。例如,以下都是等价的:
target_compile_definitions(foo PUBLIC FOO)
target_compile_definitions(foo PUBLIC -DFOO)  # -D removed
target_compile_definitions(foo PUBLIC "" FOO) # "" ignored
target_compile_definitions(foo PUBLIC -D FOO) # -D becomes "", then ignored

# 定义可选择的值:
target_compile_definitions(foo PUBLIC FOO=1)


target_compile_features

target_compile_features — CMake 3.24.0-rc3 Documentation

# 将预期的编译器功能添加到目标。

target_compile_features(<target> <PRIVATE|PUBLIC|INTERFACE> <feature> [...])


target_compile_options

target_compile_options — CMake 3.24.0-rc3 Documentation

# 将编译选项添加到目标。

target_compile_options(<target> [BEFORE]
  <INTERFACE|PUBLIC|PRIVATE> [items1...]
  [<INTERFACE|PUBLIC|PRIVATE> [items2...] ...])


target_include_directories

target_include_directories — CMake 3.24.0-rc3 Documentation

# 将包含目录添加到目标
target_include_directories(<target> [SYSTEM] [AFTER|BEFORE]
  <INTERFACE|PUBLIC|PRIVATE> [items1...]
  [<INTERFACE|PUBLIC|PRIVATE> [items2...] ...])


# PRIVATE 和 PUBLIC items 会设置到<target>的 INCLUDE_DIRECTORIES 属性中. 
# PUBLIC 和 INTERFACE items 会设置到<target>的 INTERFACE_INCLUDE_DIRECTORIES属性中.


target_link_directories

target_link_directories — CMake 3.24.0-rc3 Documentation

# 将链接目录添加到目标。

target_link_directories(<target> [BEFORE]
  <INTERFACE|PUBLIC|PRIVATE> [items1...]
  [<INTERFACE|PUBLIC|PRIVATE> [items2...] ...])


# PRIVATE 和 PUBLIC items 会设置到<target>的 LINK_DIRECTORIES 属性中. 
# PUBLIC 和 INTERFACE items 会设置到<target>的  INTERFACE_LINK_DIRECTORIES 属性中.


target_link_libraries

target_link_libraries — CMake 3.24.0-rc3 Documentation

# 为<target>指定其要依赖项的库或标志
target_link_libraries(<target> ... <item>... ...)


# 目标和/或其依赖的库
target_link_libraries(<target>
                      <PRIVATE|PUBLIC|INTERFACE> <item>...
                     [<PRIVATE|PUBLIC|INTERFACE> <item>...]...)


# 目标及其依赖的库
target_link_libraries(<target> <item>...)


target_link_options

target_link_options — CMake 3.24.0-rc3 Documentation

# 为可执行文件、共享库或模块库目标的链接步骤添加选项。

target_link_options(<target> [BEFORE]
  <INTERFACE|PUBLIC|PRIVATE> [items1...]
  [<INTERFACE|PUBLIC|PRIVATE> [items2...] ...])


target_precompile_headers

target_precompile_headers — CMake 3.24.0-rc3 Documentation

# 添加要预编译的头文件列表。

# 预编译头文件可以通过创建一些头文件的部分处理版本,然后在编译期间使用该版本而不是重复解析原始头文件来加速编译。

# 主要用法  Main Form
target_precompile_headers(<target>
  <INTERFACE|PUBLIC|PRIVATE> [header1...]
  [<INTERFACE|PUBLIC|PRIVATE> [header2...] ...])


# 重用预编译头  Reusing Precompile Headers
# 该命令还支持第二个签名,可用于指定一个目标重用来自另一个目标的预编译头文件工件,而不是生成自己的:

target_precompile_headers(<target> REUSE_FROM <other_target>)


target_sources

target_sources — CMake 3.24.0-rc3 Documentation

# 将源代码添加到目标。

target_sources(<target>
  <INTERFACE|PUBLIC|PRIVATE> [items1...]
  [<INTERFACE|PUBLIC|PRIVATE> [items2...] ...])


# 文件集
target_sources(<target>
  [<INTERFACE|PUBLIC|PRIVATE>
   [FILE_SET <set> [TYPE <type>] [BASE_DIRS <dirs>...] [FILES <files>...]]...
  ]...)


try_compile
try_run

CTest 命令(CTest Commands)

ctest_build
ctest_configure
ctest_coverage
ctest_empty_binary_directory
ctest_memcheck
ctest_read_custom_files
ctest_run_script
ctest_sleep
ctest_start
ctest_submit
ctest_test
ctest_update
ctest_upload


cmake-env-variables

cmake 环境变量

改变行为的环境变量

控制构建的环境变量

语言环境变量

CTest 的环境变量

CMake curses 接口的环境变量


cmake-generator-expressions

在构建系统生成期间使用生成器评估表达式以生成特定于每个构建配置的信息

$<BOOL:string>
$<AND:conditions>
$<OR:conditions>
$<NOT:condition>

cmake-generators

生成原生系统的编辑文件,如windows的vcxproj,linux的makefile

命令行构建工具生成器

Makefile Generators

Ninja Generators

Ninja首页、文档和下载 - 小而快的构建系统 - OSCHINA - 中文开源技术交流社区

Ninja 是 Google 的一名程序员推出的注重速度的构建工具,一般在 Unix/Linux 上的程序通过 make/makefile 来构建编译,而 Ninja 通过将编译任务并行组织,大大提高了构建速度。Ninja 的目标是成为汇编程序。

IDE 构建工具生成器

Visual Studio Generators

Other Generators

额外的生成器


cmake-language

cmake 语言。讲述其组织、目录结构、脚本、模块、语法、编码、命令调用等


cmake-modules

此处列出的模块是 CMake 发行版的一部分。项目可能提供更多模块,它们的位置可以由CMAKE_MODULE_PATH指定。

实用模块

这些模块使用include()命令进行加载

查找模块

这些模块用来搜索第三方软件。它们通常通过find_package()命令进行使用


cmake-packages

包含使用包,包的结构,创建包,注册包

find_package(Qt4 4.7.0 REQUIRED) # CMake provides a Qt4 find-module
find_package(Qt5Core 5.1.0 REQUIRED) # Qt provides a Qt5 package config file.
find_package(LibXml2 REQUIRED) # Use pkg-config via the LibXml2 find-module

cmake-policies  策略

cmake-presets  与人共享

cmake-properties  属性

cmake-qt  qt cmake


 


cmake-toolchains

cmake-toolchains(7) — CMake 3.24.0-rc3 Documentation

设置编译工具链

# 一个典型的 Linux 交叉编译工具链包含以下内容:
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR arm)

set(CMAKE_SYSROOT /home/devel/rasp-pi-rootfs)
set(CMAKE_STAGING_PREFIX /home/devel/stage)

set(tools /home/devel/gcc-4.7-linaro-rpi-gnueabihf)
set(CMAKE_C_COMPILER ${tools}/bin/arm-linux-gnueabihf-gcc)
set(CMAKE_CXX_COMPILER ${tools}/bin/arm-linux-gnueabihf-g++)

set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)

cmake-variables

cmake-variables(7) — CMake 3.24.0-rc3 Documentation

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值