• C++-Cmake指令:include_directories


    • 命令格式

      include_directories ([AFTER|BEFORE] [SYSTEM] dir1 [dir2 ...])
      将指定目录添加到编译器的头文件搜索路径之下,指定的目录被解释成当前源码路径的相对路径。

    • 命令解析

        默认情况下,include_directories命令会将目录添加到列表最后,可以通过命令设置CMAKE_INCLUDE_DIRECTORIES_BEFORE变量为ON来改变它默认行为,将目录添加到列表前面。也可以在每次调用include_directories命令时使用AFTERBEFORE选项来指定是添加到列表的前面或者后面。如果使用SYSTEM选项,会把指定目录当成系统的搜索目录。该命令作用范围只在当前的CMakeLists.txt。
      一、include_directories命令的基本行为:

      1. #CMakeLists.txt
      2. cmake_minimum_required(VERSION 3.18.2)
      3. project(include_directories_test)
      4. include_directories(sub)
      5. include_directories(sub2) #默认将sub2添加到列表最后
      6. include_directories(BEFORE sub3) #可以临时改变行为,添加到列表最前面
      7. get_property(dirs DIRECTORY ${CMAKE_SOURCE_DIR} PROPERTY INCLUDE_DIRECTORIES)
      8. message(">>> include_dirs=${dirs}") #打印一下目录情况
      9. set(CMAKE_INCLUDE_DIRECTORIES_BEFORE ON) #改变默认行为,默认添加到列表前面
      10. include_directories(sub4)
      11. include_directories(AFTER sub5) #可以临时改变行为,添加到列表的最后
      12. get_property(dirs DIRECTORY ${CMAKE_SOURCE_DIR} PROPERTY INCLUDE_DIRECTORIES)
      13. message(">>> SET DEFAULT TO BEFORE, include_dirs=${dirs}")
      1. #输出
      2. >>> include_dirs=/XXX/XXX/sub3;/XXX/XXX/sub;/XXX/XXX/sub2
      3. >>> SET DEFAULT TO BEFORE, include_dirs=/XXX/XXX/sub4;/XXX/XXX/sub3;/XXX/XXX/sub;/XXX/XXX/sub2;/XXX/XXX/sub5

      二、下面结合实际的头文件包含来说明其用法,创建的文件和目录结构及说明如下:

      ├── CMakeLists.txt    #最外层的CMakeList.txt
      ├── main.cpp    #源文件,包含被测试的头文件
      ├── sub    #子目录
       └── test.h    #测试头文件,是个空文件,被外层的main,cpp包含

      • 场景1:不使用include_directories包含子目录sub,直接在main.cpp里面包含"test.h"
      1. # CMakeList.txt
      2. cmake_minimum_required(VERSION 3.18.2)
      3. project(include_directories_test)
      4. add_executable(test main.cpp)
      1. //main.cpp
      2. #include "test.h"
      3. #include
      4. int main(int argc, char **argv)
      5. {
      6. printf("hello, world!\n");
      7. return 0;
      8. }

      执行cmake --build .,会提示找不到头文件的错误:

      1. fatal error: 'test.h' file not found
      2. #include "test.h"
      • 场景2:使用include_directories包含子目录sub,并在main.cpp里面包含"test.h"
      1. # CMakeList.txt
      2. cmake_minimum_required(VERSION 3.18.2)
      3. project(include_directories_test)
      4. include_directories(sub) #与上个场景不同的地方在于此处
      5. add_executable(test main.cpp)
      1. //main.cpp
      2. #include "test.h"
      3. #include
      4. int main(int argc, char **argv)
      5. {
      6. printf("hello, world!\n");
      7. return 0;
      8. }

      执行cmake --build .,会生成可执行文件test,使用./test执行后会输出打印hello, world!。当然,不使用include_directories(sub),在main.cpp中直接使用#include "sub/test.h"也是可以的。



    Cmake命令之include_directories介绍 - 简书

  • 相关阅读:
    Mysql数据库中的用户管理与授权
    uniapp获取地理位置的API是什么?
    WhatsApp 私域营销指南
    不容错过!!C语言-回调函数详解
    计算机毕业设计ssm+vue基本微信小程序的拼车自助服务小程序
    R 语言入门 —— tidyverse
    mybatis if标签或者when标签判断字符串是否相等
    汽车电子 - AUTOSAR
    (部署服务器系列二)服务器上安装springboot运行环境,发布并运行项目
    Android 系统启动流程解析
  • 原文地址:https://blog.csdn.net/u013250861/article/details/127936274