C++-Cmake指令:include_directories
创始人
2024-02-01 12:22:41
0
  • 命令格式

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

  • 命令解析

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

    #CMakeLists.txt
    cmake_minimum_required(VERSION 3.18.2)
    project(include_directories_test)include_directories(sub) 
    include_directories(sub2) #默认将sub2添加到列表最后
    include_directories(BEFORE sub3) #可以临时改变行为,添加到列表最前面get_property(dirs DIRECTORY ${CMAKE_SOURCE_DIR} PROPERTY INCLUDE_DIRECTORIES)
    message(">>> include_dirs=${dirs}") #打印一下目录情况set(CMAKE_INCLUDE_DIRECTORIES_BEFORE ON) #改变默认行为,默认添加到列表前面
    include_directories(sub4)
    include_directories(AFTER sub5) #可以临时改变行为,添加到列表的最后
    get_property(dirs DIRECTORY ${CMAKE_SOURCE_DIR} PROPERTY INCLUDE_DIRECTORIES)
    message(">>> SET DEFAULT TO BEFORE, include_dirs=${dirs}")
    
    #输出
    >>> include_dirs=/XXX/XXX/sub3;/XXX/XXX/sub;/XXX/XXX/sub2
    >>> 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"
    # CMakeList.txt
    cmake_minimum_required(VERSION 3.18.2)
    project(include_directories_test)
    add_executable(test main.cpp)
    
    //main.cpp
    #include "test.h"
    #include 
    int main(int argc, char **argv)
    {printf("hello, world!\n");return 0;
    }
    

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

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

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



Cmake命令之include_directories介绍 - 简书

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
一帆风顺二龙腾飞三阳开泰祝福语... 本篇文章极速百科给大家谈谈一帆风顺二龙腾飞三阳开泰祝福语,以及一帆风顺二龙腾飞三阳开泰祝福语结婚对应...
美团联名卡审核成功待激活(美团... 今天百科达人给各位分享美团联名卡审核成功待激活的知识,其中也会对美团联名卡审核未通过进行解释,如果能...