CMake入门教程【核心篇】包含目录(include_directories)

在这里插入图片描述

😈「CSDN主页」:传送门
😈「Bilibil首页」:传送门
😈「本专栏容」:CMake入门教程
😈「动动你的小手」点赞👍收藏⭐️评论📝


文章目录

    • 1. 基本用法
    • 2. 添加单个包含目录
    • 3. 添加多个包含目录
    • 4. 控制包含目录的搜索顺序
    • 5. 区分系统头文件和用户头文件
    • 6.使用技巧
      • 6.1 避免全局设置
      • 6.2 使用`target_include_directories`
      • 6.3 区分私有和公共包含目录
      • 6.4 管理第三方库的包含目录

CMake的 include_directories命令是用于指定头文件搜索路径的重要工具。在编译C++代码时,正确设置包含目录对于确保编译器能够找到所有必要的头文件至关重要。

include_directories 使用
添加单个包含目录
添加多个包含目录
控制搜索顺序
区分系统和用户头文件
使用技巧
include_directories(include)
include_directories(include1 include2)
include_directories(AFTER include1 BEFORE include2)
include_directories(SYSTEM system_include)
避免全局设置
使用target_include_directories
target_include_directories(my_target PRIVATE include)
区分私有和公共包含目录
target_include_directories(my_library PUBLIC include_public)
target_include_directories(my_library PRIVATE include_private)
管理第三方库包含目录
find_package(Boost REQUIRED)
target_include_directories(my_target PRIVATE \${Boost_INCLUDE_DIRS})

1. 基本用法

include_directories命令用于添加包含目录,其基本语法如下:

include_directories([AFTER|BEFORE] [SYSTEM] directory1 [directory2 ...])
  • directory1, directory2, … 是要添加的包含目录。

2. 添加单个包含目录

include_directories(include)
  • 这会将项目目录下的include目录添加到包含路径中。

3. 添加多个包含目录

include_directories(include1 include2)
  • 这会同时将include1include2目录添加到包含路径中。

4. 控制包含目录的搜索顺序

include_directories(AFTER include1 BEFORE include2)
  • 使用AFTERBEFORE关键字可以控制包含目录的搜索顺序。在此例中,include1会在include2之后被搜索。

5. 区分系统头文件和用户头文件

include_directories(SYSTEM system_include)
  • 使用SYSTEM参数可以将特定目录标记为系统头文件目录,这有助于减少编译器对于系统头文件的警告。

6.使用技巧

6.1 避免全局设置

尽可能避免在项目的根CMakeLists.txt中全局设置包含目录,以防止不同目标间的潜在冲突。

6.2 使用target_include_directories

在现代CMake中,推荐使用target_include_directories而不是include_directories

target_include_directories(my_target PRIVATE include)
  • 这将include目录添加到特定目标my_target的私有包含路径。

6.3 区分私有和公共包含目录

对于库目标,使用PRIVATEPUBLIC关键字区分私有和公共包含目录:

target_include_directories(my_library PUBLIC include_public)
target_include_directories(my_library PRIVATE include_private)
  • PUBLIC包含目录会被库的使用者继承,而PRIVATE包含目录仅用于库本身的构建。

6.4 管理第三方库的包含目录

使用find_packagepkg_check_modules来管理第三方库,并使用其提供的包含目录:

find_package(Boost REQUIRED)
target_include_directories(my_target PRIVATE ${Boost_INCLUDE_DIRS})
  • 这样可以确保第三方库的包含目录被正确添加。

通过这些方法,您可以有效地管理和优化CMake项目中的包含目录,确保构建系统的可维护性和可移植性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/290627.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【SpringBoot开发】之商城项目案例(订单及订单项生成)

🎉🎉欢迎来到我的CSDN主页!🎉🎉 🏅我是君易--鑨,一个在CSDN分享笔记的博主。📚📚 🌟推荐给大家我的博客专栏《SpringBoot开发之商城项目系列》。&#x1f3af…

鸿蒙系列--装饰器

一、基础UI组件结构 每个UI组件需要定义为Component struct对象,其内部必须包含一个且只能包含一个build(){}函数,用于绘制UI;struct之内、build()函数之外的地方用于存放数据。 二、基本UI装饰器 Entry 装饰struct,页面的入口…

系列十、Spring Cloud Gateway

一、Spring Cloud Gateway 1.1、概述 Spring Cloud全家桶中有个很重要的组件就是网关,在1.x版本中采用的是Zuul网关,但是在2.x版本中,由于Zuul的升级一直跳票,Spring Cloud最后自己研发了一个网关替代Zuul,即&#xf…

2020年认证杯SPSSPRO杯数学建模B题(第二阶段)分布式无线广播全过程文档及程序

2020年认证杯SPSSPRO杯数学建模 B题 分布式无线广播 原题再现: 以广播的方式来进行无线网通信,必须解决发送互相冲突的问题。无线网的许多基础通信协议都使用了令牌的方法来解决这个问题,在同一个时间段内,只有唯一一个拿到令牌…

Unity 2022 版本 寻路 NavMesh

官方教程地址 https://docs.unity3d.com/Packages/com.unity.ai.navigation1.1/manual/index.html 首先装包 先给地图 和 阻挡 设置为静态 然后给地上行走的地方 添加组件 可以直接bake 然后会显示蓝色的可行走路径 player 添加插件 然后给角色添加脚本 using System.Co…

MySQL基础篇(一)SQL

视频地址: 黑马程序员 MySQL数据库入门到精通,从mysql安装到mysql高级、mysql优化全囊括 SQL,全称 Structured Query Language,结构化查询语言。操作关系型数据库的编程语言,定义了一套操作关系型数据库统一 标准。 一、SQL通用语…

ImportError: DLL load failed while importing imaging: 找不到指定的模块

24.1 ImportError: DLL load failed while importing imaging: 找不到指定的模块 参考:https://zhuanlan.zhihu.com/p/662305030?utm_id0 说明:Pillow 与pillow都可以,不区分首字母大小写 第一步:查看是否有pillow 1)…

AI:117-基于机器学习的环境污染影响评估

🚀点击这里跳转到本专栏,可查阅专栏顶置最新的指南宝典~ 🎉🎊🎉 你的技术旅程将在这里启航! 从基础到实践,深入学习。无论你是初学者还是经验丰富的老手,对于本专栏案例和项目实践都有参考学习意义。 ✨✨✨ 每一个案例都附带有在本地跑过的关键代码,详细讲解供…

vue3+Ts+Hook的方式实现商城核心功能sku选择器

前言 Hooks是React等函数式编程框架中非常受欢迎的工具,随着VUE3 Composition API 函数式编程风格的推出,现在也受到越来越多VUE3开发者的青睐,它让开发者的代码具有更高的复用度且更加清晰、易于维护。 本文将通过CRMEB商城商品详情sku选择…

【完整思路】2023 年中国高校大数据挑战赛 赛题 B DNA 存储中的序列聚类与比对

2023 年中国高校大数据挑战赛 赛题 B DNA 存储中的序列聚类与比对 任务 1.错误率和拷贝数分析:分析“train_reads.txt”和“train_reference.txt”数据集中的错误率(插入、删除、替换、链断裂)和序列拷贝数。 2.聚类模型开发:开发…

Vue3+TS+ElementPlus的安装和使用教程【详细讲解】

前言 本文简单的介绍一下vue3框架的搭建和有关vue3技术栈的使用。通过本文学习我们可以自己独立搭建一个简单项目和vue3的实战。 随着前端的日月更新,技术的不断迭代提高,如今新vue项目首选用vue3 typescript vite pinia……模式。以前我们通常使用…

【教学类-43-15】 20240103 (5宫格数独:内存数据不够计算) 不重复的基础模板数量:未知

背景需求: 测试5宫格有多少种不重复的基础模板(只测试所有的25数字一组有多少个) # 测试11*11格,2*2一共4套3*3 宫格目的:数独14 5宫格有不同的基础模板 作者:阿夏 时间:2024年01月04日 13:…

【Echarts实践案例】如何在线图上标记一个非轴线上的点

需求背景: 当前有一个趋势图,横坐标表示灯泡平均使用时长,纵坐标表示灯泡平均使用温度。现在需要在当前坐标系下标记一个正在使用中的灯泡的时长及温度(趋势图表示的是计算出的平均温度,所以当前灯泡的温度可能不会在…

算法导论复习——CHP22 基本图算法

图的表示 邻接矩阵和邻接表 稀疏图一般用邻接表表示(稀疏图:边数|E|远小于的图 ) 稠密图更倾向于用邻接矩阵表示 (稠密图:边数|E|接近的图) 邻接矩阵可用于需要快速判断任意两个结点之间是否有边相连的应用场景。 如果用邻…

纯前端上传word,xlsx,ppt,在前端预览并下载成图片(预览效果可以,下载图片效果不太理想)

纯前端上传word,xlsx,ppt,在前端预览并下载成图片(预览效果可以,下载图片效果不太理想) 一.安装依赖二、主要代码 预览效果链接: https://github.com/501351981/vue-office 插件文档链接: https://501351981.github.io/vue-office/examples/d…

使用(?<!pattern) 负向后行断言正则表达式提取一个双引号开头和结尾的字符串

如下是一段java代码,我想用正则表达从中提取代码中的字符串 cond_buffer.append(" ORDER BY \"name\" \"").append(join(order_by_column,"\","));java是通过前后用双引号包含定义字符串的。但简单使用正则表达式".…

Kubernetes Gateway API V1.0:您应该切换吗?

自Kubernetes Gateway API 发布 v1.0以来已经过去两个多月了,这标志着其一些关键 API 已经进入普遍可用状态。 去年,当网关 API升级为测试版时,我曾写过有关该 API的文章,但一年后,问题仍然存在。您是否应该从 Ingres…

Python----matplotlib库

目录 plt库的字体: plt的操作绘图函数: plt.figure(figsizeNone, facecolorNone): plt.subplot(nrows, ncols, plot_number): plt.axes(rect): plt.subplots_adjust(): plt的读取和显示相关函数: plt库的基础图…

Python内置类属性__module__属性的使用教程

概要 在Python中,每个对象都有一些内置的属性,这些属性提供了有关对象的一些信息。其中一个内置属性是__module__属性。__module__属性是一个字符串,它表示定义了类或函数的模块的名称。在本篇文章中,我们将详细介绍__module__属…

随机森林,Random Forests Classifiers/Regressor

目录 介绍: 一、 Random Forests Classifiers(离散型) 1.1 数据处理 1.2建模 1.3特征值权值分析 1.4 特征值的缩减 二、Random Forests Regressor(连续型) 2.1数据处理 2.2建模 2.3调参 介绍: …