软件项目中引用头文件的几种方法及要点

关注+星标公众,不错过精彩内容

作者 | strongerHuang

微信公众号 | 嵌入式专栏

好的编程习惯,会直接影响代码的质量,在嵌入式C/C++中,头文件的引用方式和方法有多种,同时一些细节也会影响你代码质量和编译效率。

下面就来说说与头文件有关的知识;

嵌入式专栏

1

引号“”和尖括号<>

#include使用引号“” 还是 尖括号<> 这个是有规定的。

通常来说:系统自带的头文件用尖括号括起来,这样编译器会在系统文件目录下查找

#include <xxx.h>

用户自定义的文件用双引号括起来,编译器首先会在用户目录下查找。

#include "xxx.h"

这里可以参看我之前分享的一篇文章:#include使用引号“”和尖括号<>的区别?

嵌入式专栏

2

引用头文件路径问题

一个项目通常有多个源文件,你要让编译器找到这些存储在不同路径下的源文件,就必须要让编译器知道源代码所在(路径)位置。

引用头文件路径的方式有多种,在代码中添加路径,在IDE工具中添加路径,还有分绝对路径和相对路径。下面就来简单说说:

1.源代码中引用头文件

不使用集成开发环境(IDE),通常会在源代码中添加路径信息,比如在源代码文件中引用头文件:

#include "/strongerhuang/robot/project/bsp/bsp_uart.h"
#include "../bsp/bsp_uart.h"

但是,你会发现上面那个引用有什么区别吗?

一个是绝对路径:

#include "/strongerhuang/robot/project/bsp/bsp_uart.h"

一个是相对路径:

#include "../bsp/bsp_uart.h"

2.IDE工具中引用头文件

我们使用的Keil、IAR这种工具,可以不用像上面那样,在源代码中添加路径头文件,只需要在工程中配置编译路径即可。

比如Keil MDK:

通过菜单 Project -> Options for Taget -> C/C++:

Keil MDK默认是相对(工程文件的)路径。

这里推荐扩展阅读(工程选项配置)相关的文章:

Keil系列教程05_工程目标选项配置(一)

Keil系列教程06_工程目标选项配置(二)

IAR EWARM类似:

通过菜单 Project -> Options -> C/C++ Compiler:

IAR默认是绝对路径,通常我们需要修改为相对路径。

这里推荐扩展阅读(工程选项配置)相关的文章:

IAR系列教程06_工程节点选项配置(一)

IAR系列教程07_工程节点选项配置(二)

嵌入式专栏

3

头文件相关内容

这里顺便说下关于头文件的几个重要内容。

1.防止头文件被重复引用

这个问题对于老司机来说,可能不是什么问题,但很多新手却没搞明白是什么意思。

通常,在某xxx.h头文件中,会有类似如下的一部分代码:

#ifndef _XXX_H
#define _XXX_H


#endif

“#”这是一个预处理指令,什么意思呢?

简单来说就是:如果没有包含XXX.h头文件,就包含;否则不包含(即不重复引用)

2.全局(全部)头文件

有些工程师喜欢把一个工程中所有的.h头文件放在一个全局的头文件(比如 global.h)中,然后,每个.c源文件去引用这个(global.h)头文件。

这样有利也有弊:

利:简单方便,不用担心因为漏掉一个 .h 文件而引起错误、警告;

弊:只要修改一个.h,工程就需要全局编译,浪费很多时间;

所以,我个人建议不使用这种全局头文件(global.h)来管理头文件。

这种做法只是方便了一时,也不利于管理,在几个源文件这种小项目中可能没觉得什么。

但是,如果项目越来越大,特别几十上百个源代码,每个源文件代码又比较大的情况下,你修改一个 .h 文件,只能慢慢等待编译。

在项目比较敢的时候,这种做法可能会使你心态奔溃。

------------ END ------------

后台回复『嵌入式C语言』『嵌入式软件基础知识』阅读更多相关文章。

欢迎关注我的公众号回复“加群”按规则加入技术交流群,回复“1024”查看更多内容。

欢迎关注我的视频号:

点击“阅读原文”查看更多分享,欢迎点分享、收藏、点赞、在看。 

CMake是一个跨平台的自动化构建系统,使用CMakeLists.txt文件来指定如何构建项目的各种设置。设置头文件路径是构建过程的一个常见需求,以下是几种在CMake设置头文件路径的方法: 1. 使用`include_directories()`命令: 这是最常用的方法之一。`include_directories()`命令用于向编译器添加头文件搜索路径。你可以指定绝对路径或相对路径。例如: ```cmake include_directories("/path/to/headers") include_directories("relative/path/to/headers") ``` 这些路径会被添加到编译器头文件搜索列表,适用于所有的目标(target)。 2. 使用`target_include_directories()`命令: 如果你希望只对特定的目标(target)添加头文件路径,可以使用`target_include_directories()`。这可以确保头文件路径只对指定的目标有效。例如: ```cmake target_include_directories(my_target PRIVATE "/path/to/headers") ``` 其`my_target`是你的目标名称,`PRIVATE`表示该头文件路径只对目标本身可见。 3. 使用`link_directories()`命令: `link_directories()`命令用于添加库文件的搜索路径。虽然它不是直接添加头文件路径的命令,但它在链接阶段可能需要头文件路径对应的库文件,因此间接影响头文件的查找。使用方法如下: ```cmake link_directories("/path/to/libs") ``` 4. 使用`target_link_directories()`命令: 类似于`link_directories()`,但`target_link_directories()`可以指定特定的目标(target)链接库的搜索路径。例如: ```cmake target_link_directories(my_target PRIVATE "/path/to/libs") ``` 5. 设置环境变量: 虽然不推荐,但你可以通过设置环境变量`CMAKE_INCLUDE_PATH`和`CMAKE_LIBRARY_PATH`来添加头文件和库文件的路径。这会影响CMake找到头文件和库文件的方式。 请注意,设置头文件路径时,应确保路径的正确性以及根据项目需求选择正确的命令和作用域(如`PRIVATE`, `PUBLIC`, `INTERFACE`)。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

strongerHuang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值