码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • CMake常用命令(三)include_directories和target_include_directories命令


    文章目录

    • include_directories
      • 语法
      • 作用
      • 参数
        • 举例
    • target_include_directories
      • 语法
      • 作用
      • 参数
      • 两者的区别
      • include_directories:
        • target_include_directories:
        • 使用建议
      • 参考


    include_directories

    语法

    include_directories ([AFTER|BEFORE] [SYSTEM] dir1 [dir2 ...])
    
    • 1

    作用

    将指定目录添加到编译器的头文件搜索路径之下,指定的目录被解释成当前源码路径的相对路径。

    参数

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

    举例

    假设当前系统的cmake版本为3.10.2

    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}")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    输出为:

    >>> 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
    
    • 1
    • 2

    target_include_directories

    语法

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

    作用

    该命令可以指定目标(exe或者so文件)需要包含的头文件路径,命名为 < target > 的命令必须是由 add _ Executive ()或 add _ library ()之类的命令创建的,并且不能是 ALIAS 目标。

    参数

    • PUBLIC:对内对外都公开,可将头文件目录以及链接库传递给连接者,target对应的头文件、源文件都使用。
    • PRIVATE:对内公开,对外不公开,不可传递头文件目录以及链接库,target对应的源文件使用。
    • INTERFACE:对外公开,对内不公开,可传递头文件目录以及链接库,但内部不可使用头文件及连接库,只能接口传递,target对应的头文件使用。

    两者的区别

    include_directories:

    当前CMakeLists.txt的所有目标,以及之后添加的所有子目录的目标添加头文件搜索路径。因此,慎用include_directories,因为会影响全局target。

    target_include_directories:

    指定目标包含的头文件路径。如果想为不同目标设置不同的搜索路径,那么用target_include_directories更合适。

    使用建议

    target_include_directories() 的功能完全可以使用 include_directories() 实现。但是我还是建议使用 target_include_directories()。为什么?保持清晰!

    include_directories(header-dir) 是一个全局包含,向下传递。什么意思呢?就是说如果某个目录的 CMakeLists.txt 中使用了该指令,其下所有的子目录默认也包含了header-dir 目录。

    参考

    Cmake命令之include_directories介绍
    官方文档include_directories
    官方文档target_include_directories
    include_directories和target_include_directories
    cmake:target_** 中的 PUBLIC,PRIVATE,INTERFACE

  • 相关阅读:
    .net webapi 实现 接口版本控制并打通swagger支持
    Data.olllo:轻松去除所有字母
    Python协程(asyncio)(三)异步应用对象
    抖音无水印视频采集软件|视频批量提取工具
    S7-1200PLC红灯闪烁报警,提示“硬件组件已移除或缺失”的原因分析
    142. 环形链表 II
    猿创征文 | 微服务 Spring Boot 整合Redis 实战开发解决缓存穿透、缓存雪崩、缓存击穿
    2024年天津财经大学珠江学院专升本预计新增金融学招生专业
    【操作系统导论】机制:受限直接执行 | 中断处理 | 陷阱 | 协作方式 | 非协作方式 | 上下文切换
    博客马拉松|和 OpenMLDB 一路向前
  • 原文地址:https://blog.csdn.net/qq_26849933/article/details/127131908
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号