目标对象包含的(add_executable和add_library的target)

1 target_include_directories

target_include_directories(<target> [SYSTEM] [AFTER|BEFORE]
  <INTERFACE|PUBLIC|PRIVATE> [items1...]
  [<INTERFACE|PUBLIC|PRIVATE> [items2...] ...])

该命令用于为特定目标 target 添加头文件目录。

参数说明

  1. <target> 构建目标,使用 add_executable()add_library 声明,不可为 ALIAS 目标。

  2. [SYSTEM] 指定是否平台相关,若该属性与 PUBLIC 或 INTERFACE 一同设置,CMake 将使用指定的目录初始化目标的 INTERFACE_SYSTEM_INCLUDE_DIRECTORIES 属性;

    • INTERFACE_SYSTEM_INCLUDE_DIRECTORIES: 该属性为含有平台相关头文件的目录,常用于抑制编译器警告;
  3. [AFTER|BEFORE] 指定相应目录添加的顺序,在后添加/在前添加。

  4. [INTERFACE|PUBLIC|PRIVATE] 指定头文件的可见性,若设置 PRIVATE 或 PUBLIC,CMake 将使用指定的目录初始化目标的 INCLUDE_DIRECTORIES 属性,若设置为 PUBLIC 或 INTERFACE,CMake 将使用指定的目录初始化目标的 INTERFACE_INCLUDE_DIRECTORIES 属性;

    • INCLUDE_DIRECTORIES: 该属性为目标的头文件目录;

    • INTERFACE_INCLUDE_DIRECTORIES: 该属性为目标的开放头文件目录;

  5. [items] 指定要添加的头文件目录,可以使用相对路径或绝对路径,相对路径为相对于当前路径 CMAKE_CURRENT_SOURCE_DIR,也可以使用 CMake 提供的 generator expression。

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

4 include_directories

所有目标对象都会包含该头文件目录
include_directories([AFTER|BEFORE] [SYSTEM] dir1 [dir2 ...])
所有目标对象都会包含该链接目录
link_directories([AFTER|BEFORE] directory1 [directory2 ...])
所有目标对象都会包含该链接库
link_libraries([item1 [item2 [...]]]
               [[debug|optimized|general] <item>] ...)