CMakeLists.txt语法规则:部分常用命令说明二

一.  简介

前一篇文章学习了CMakeLists.txt语法中 add_executable命令,add_library命令,add_subdirectory 命令的简单使用。文章如下:

CMakeLists.txt语法规则:部分常用命令说明一-CSDN博客

本文继续学习 CMakeLists.txt语法中部分常用命令。

二. CMakeLists.txt语法规则:部分常用命令

1. aux_source_directory

aux_source_directory 命令会查找目录中的所有源文件,其命令定义如下:

aux_source_directory(<dir> <variable>)
从指定的目录中查找所有源文件,并将扫描到的源文件路径信息存放到 <variable> 变量中,譬如目录结构如下:
CMakeCache.txt 内容如下所示:
# 顶层 CMakeLists.txt
cmake_minimum_required("VERSION" "3.5")
project("HELLO")
# 查找 src 目录下的所有源文件
aux_source_directory(src SRC_LIST)
message("${SRC_LIST}") # 打印 SRC_LIST 变量
进入到 build 目录下,执行 cmake .. 命令,打印信息如下所示:
由此可见, aux_source_directory 会将扫描到的每一个源文件添加到 SRC_LIST 变量中,组成一个字符串列表,使用分号“ ; ”分隔。

2.  include_directories

include_directories 命令用于设置头文件的搜索路径,相当于 gcc -I 选项,其定义如下所示:

include_directories([AFTER|BEFORE] [SYSTEM] dir1 [dir2 ...])
默认情况下,会将指定目录添加到 头文件搜索列表 (可以认为每一个 CMakeLists.txt 源码都有自己的头文件搜索列表 的最后面。
可以通过设置 CMAKE_INCLUDE_DIRECTORIES_BEFORE 变量为 ON 来改变它 默认行为,将目录添加到列表前面。
也可以在每次调用 include_directories 命令时使用 AFTER BEFORE 选项来指定是添加到列表的前面或者后面。
如果使用 SYSTEM 选项,会把指定目录当成系统的搜索目录。
既可以使用绝对路径来指定头文件搜索目录、也可以使用相对路径来指定,相对路径被解释为当前源码路 径的相对路径。

譬如工程目录结构如下所示:
├── build
├── CMakeLists.txt
├── include
│ └── hello.h
└── main.c
源文件 main.c 中使用了 include 目录下的头文件 hello.h CMakeLists.txt 内容如下:
# 顶层 CMakeLists.txt
cmake_minimum_required("VERSION" "3.5")
project("HELLO")
include_directories(include)
add_executable(hello main.c)
使用 include_directories 命令,将当前目录下的 include 文件夹添加到头文件搜索列表中。
进入 build 目录下,执行 cmake make 进行构建、编译,编译过程是没有问题的,不会报错提示头文件找不到;但如果去 include_directories(include) 这条命令,编译肯定会报错,大家可以动手试试!
默认情况下, include 目录被添加到头文件搜索列表的最后面,通过 AFTER BEFORE 选项可显式指定添加到列表后面或前面:
# 添加到列表后面
include_directories(AFTER include)
# 添加到列表前面
include_directories(BEFORE include)

当调用 add_subdirectory 命令加载子源码时,会将 include_directories 命令包含的目录列表向下传递给子源码(子源码从父源码中继承过来),我们测试下,譬如工程目录结构如下所示:
src 目录下 main.c 源文件中使用了 hello.h 头文件,顶层 CMakeLists.txt 内容如下所示:
# 顶层 CMakeLists.txt
cmake_minimum_required("VERSION" "3.5")
project("HELLO")
include_directories(include)
add_subdirectory(src)
顶层 CMakeLists.txt 源码中调用了 include_directories , include 目录添加到当前源码的头文件搜索列表中。
接着调用 add_subdirectory 命令加载、执行子源码;
src 目录下 CMakeLists.txt 内容如下所示:
# src 目录 CMakeLists.txt
add_executable(hello main.c)
进入到 build 目录,进行构建、编译,整个编译过程是没有问题的。

3.  get_target_property set_target_properties

分别用于获取/设置目标的属性,这个后面再给大家进行专题介绍。

相关推荐

  1. CMakeLists.txt语法规则部分命令说明

    2024-05-04 23:22:04       13 阅读
  2. RabbitMQ命令

    2024-05-04 23:22:04       31 阅读
  3. kafka()——命令

    2024-05-04 23:22:04       33 阅读
  4. linux命令

    2024-05-04 23:22:04       16 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-05-04 23:22:04       14 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-05-04 23:22:04       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-05-04 23:22:04       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-05-04 23:22:04       18 阅读

热门阅读

  1. threejs学习之dat.gui,辅助调参工具

    2024-05-04 23:22:04       8 阅读
  2. 【微服务】 OpenFeign

    2024-05-04 23:22:04       7 阅读
  3. 数据结构===队列

    2024-05-04 23:22:04       6 阅读
  4. C# 常见的数据结构如何在CRUD时选择

    2024-05-04 23:22:04       7 阅读
  5. 孩子如何学好python

    2024-05-04 23:22:04       11 阅读
  6. 优先队列讲解

    2024-05-04 23:22:04       7 阅读
  7. C++项目(通讯录管理系统)

    2024-05-04 23:22:04       6 阅读
  8. 字节流与字符流的区别

    2024-05-04 23:22:04       8 阅读
  9. 详解AI绘画原理

    2024-05-04 23:22:04       6 阅读