CMake指令

在CMake中,常用的指令对于定义项目的构建过程至关重要。以下是一些常用的CMake指令的详细解释:

1. cmake_minimum_required

作用:指定构建该项目所需的CMake最低版本。

语法

cmake_minimum_required(VERSION major.minor [PATCH [min_policy_version]])
  • VERSION 后跟的是所需的CMake版本号。
  • PATCHmin_policy_version 是可选的,用于更精细地控制版本要求。

2. project

作用:设置项目的名称和版本(可选),并初始化一些变量。

语法

project(PROJECTNAME [VERSION major.minor.patch [LANGUAGES]])
  • PROJECTNAME 是项目的名称。
  • VERSION 后跟的是项目的版本号,是可选的。
  • LANGUAGES 指定项目使用的编程语言,也是可选的,如果不指定,则默认支持所有语言。

3. set

作用:设置变量的值。

语法

set(VAR value [CACHE TYPE DOCSTRING [FORCE]])
  • VAR 是要设置的变量名。
  • value 是变量的值。
  • CACHE 选项用于将变量存储在CMake缓存中,以便在多次构建之间保持值不变。
  • TYPEDOCSTRINGFORCE 是与缓存变量相关的选项。

4. add_executable

作用:添加一个可执行文件目标。

语法

add_executable(name [WIN32] [MACOSX_BUNDLE] [EXCLUDE_FROM_ALL] source1 source2 ... sourceN)
  • name 是可执行文件的名称。
  • [WIN32][MACOSX_BUNDLE][EXCLUDE_FROM_ALL] 是可选的参数,用于指定特定的构建选项。
  • source1 source2 ... sourceN 是构成可执行文件的源文件列表。

5. add_library

作用:添加一个库目标。

语法

add_library(name [STATIC | SHARED | MODULE] [EXCLUDE_FROM_ALL] source1 source2 ... sourceN)
  • name 是库的名称。
  • [STATIC | SHARED | MODULE] 指定库的类型,默认为STATIC。
  • [EXCLUDE_FROM_ALL] 是可选的,表示该库不会被默认构建。
  • source1 source2 ... sourceN 是构成库的源文件列表。

6. target_link_libraries

作用:为目标添加需要链接的库。

语法

target_link_libraries(target  item1 [item2 ...])
  • target 是要链接库的目标名称。
  • 指定链接的可见性。
  • item1 [item2 ...] 是要链接的库或目标列表。

7. target_include_directories

作用:为目标添加包含目录。

语法

target_include_directories(target  dir1 [dir2 ...])
  • target 是要添加包含目录的目标名称。
  • 指定包含目录的可见性。
  • dir1 [dir2 ...] 是要添加的包含目录列表。

8. include_directories

作用:向项目添加全局包含目录。

注意:虽然include_directories仍然可用,但推荐使用target_include_directories来替代,因为它提供了更好的作用域控制。

语法

include_directories([AFTER|BEFORE] [SYSTEM] dir1 [dir2 ...])
  • [AFTER|BEFORE] 指定包含目录的添加顺序(相对于其他包含目录)。
  • [SYSTEM] 表示这些目录是系统目录,CMake会相应地处理它们。
  • dir1 [dir2 ...] 是要添加的全局包含目录列表。

9. find_package

作用:查找并加载指定的外部项目。

语法

find_package(PackageName [version] [EXACT] [REQUIRED|QUIET|MODULE] [...])
  • PackageName 是要查找的外部项目的名称。
  • [version] 是指定查找的版本号。
  • [EXACT] 表示版本号必须完全匹配。
  • [REQUIRED|QUIET|MODULE] 是控制查找行为的选项:
  • [REQUIRED] 表示如果找不到包,则CMake会报错并停止配置过程。
  • [QUIET] 表示在找不到包时,不会输出任何消息。
  • [MODULE] 表明CMake将仅查找模块模式的包。

find_package 会设置一些变量,这些变量通常包含找到的包的路径、头文件位置、库文件等,以便在项目中使用。

10. add_subdirectory

作用:向当前项目添加另一个子项目。

语法

add_subdirectory(source_dir [binary_dir] [EXCLUDE_FROM_ALL])
  • source_dir 是子项目的源代码目录。
  • [binary_dir] 是可选的,指定构建输出的目录。
  • [EXCLUDE_FROM_ALL] 表示该子项目不会被默认构建,除非有其他组件依赖或手动构建。

11. add_definitions

注意:虽然add_definitions在某些情况下仍然有用,但现代CMake项目更倾向于使用target_compile_definitions来为目标添加编译定义,因为它提供了更好的作用域控制。

作用:向编译器添加全局编译定义(即-D宏定义)。

语法

add_definitions(-DMACRO1 -DMACRO2=value)
  • -DMACRO1 添加了一个名为MACRO1的编译定义。
  • -DMACRO2=value 添加了一个名为MACRO2的编译定义,并将其值设置为value

12. option

作用:在CMake中定义一个开关选项,类似于CMake变量,但具有ON/OFF的布尔值。

语法

option(VARIABLE_NAME "help string describing this option" [initial value])
  • VARIABLE_NAME 是选项的名称,同时也是CMake变量的名称。
  • "help string describing this option" 是对该选项的描述。
  • [initial value] 是该选项的初始值,默认为OFF。

13. configure_file

作用:将文件内容中的变量替换为它们的值,并将结果写入到另一个文件中。这通常用于配置文件或版本文件的生成。

语法

configure_file( 
               [COPYONLY] [ESCAPE_QUOTES] [@ONLY]
               [NEWLINE_STYLE [UNIX|DOS|WIN32|LF|CRLF]]
               [AT_ONLY])
  • 是输入文件的路径。
  • 是输出文件的路径。
  • 其他选项用于控制替换行为和文件格式。

14. install

在软件开发中,构建软件只是第一步,将软件及其必要的组件安装到用户的系统或指定位置以供使用,是开发周期中的一个关键环节。install 指令允许开发者指定安装哪些文件、安装到哪些位置以及如何进行安装,这对于创建可分发和可部署的软件包至关重要。
install 指令的基本语法如下:

install([TARGETS ...]
        [RUNTIME DESTINATION ]
        [LIBRARY DESTINATION ]
        [ARCHIVE DESTINATION ]
        [FRAMEWORK DESTINATION ]
        [BUNDLE DESTINATION ]
        [FILES ...]
        [PROGRAMS ...]
        [DIRECTORY ...]
        [SCRIPT ...]
        [CODE ...]
        [COMPONENT ]
        [OPTIONAL] [...])

这个指令非常灵活,可以安装多种类型的文件,包括:

  • TARGETS:指定要安装的构建目标(如可执行文件、库)。

    • RUNTIME DESTINATION:指定运行时文件(如可执行文件)的安装目录。
    • LIBRARY DESTINATION:指定库文件的安装目录。
    • ARCHIVE DESTINATION:指定静态库(如.a、.lib)的安装目录(注意:在某些系统上,静态库和共享库可能安装在同一目录下)。
    • 其他 DESTINATION 选项用于特定类型的目标,如框架(FRAMEWORK DESTINATION)或应用程序包(BUNDLE DESTINATION)。
  • FILES:直接指定要安装的文件列表。

  • PROGRAMS:与 FILES 类似,但通常用于安装可执行脚本或程序。

  • DIRECTORY:安装整个目录及其内容。

  • SCRIPT:在安装过程中执行 CMake 脚本。

  • CODE:在安装过程中执行 CMake 代码块。

示例: 假设你有一个名为 MyApplication 的可执行文件和一个名为 MyLibrary 的共享库,你想要将它们安装到用户的系统中,你可以这样写:

install(TARGETS MyApplication MyLibrary
        RUNTIME DESTINATION bin
        LIBRARY DESTINATION lib
        ARCHIVE DESTINATION lib/static)

这个命令会安装 MyApplicationbin 目录(通常是可执行文件的安装位置),并将 MyLibrary 的共享库版本安装到 lib 目录,假设你还有一个静态库版本,你可以将其安装到 lib/static 目录。

你可能感兴趣的:(CMake,CMake)