gcc 编译时 include 搜索路径
这是一个不复杂的问题;但是网上很多回答都不全面;偶找了一个比较全面的(测试过):
#include有两种形式,例如如下:
#include <syshead.h>
#include "userhead.h"
用尖括号表示的是包含系统的头文件,用双引号包含的是用户自己的头文件。
下面是使用#include时的一些规则:
1)使用<>包含的头文件一般会先搜索-I选项后的路径(即用gcc编译时的-I选项),之后就是标准的系统头文件路径。
2)而用""号包含的头文件会首先搜索当前的工作目录,之后的搜索路径才是和<>号包含的头文件所搜索的路径一样的路径。
3)在unix系统中,一般标准的头文件路径为:
/usr/local/include
/usr/lib/gcc-lib/target/version/include
/usr/target/include
/usr/include
4)一般有两条独立的头文件搜索路径链。一条是-I后面指示的路径,另一条是系统头文件路径和以-prefix, -withprefix,和-idirafter后操作的目录。
5)如果gcc编译的是c++的程序,那么在搜索上面所说的目录前,预处理器会首先搜索/usr/include/g++v3目录,v3是你的gcc中c++的版本。
6)在头文件中运行增加路径名,例如:#include <sys/time.h>,那么就会在搜索的系统目录的sys目录下寻找time.h文件。
7)一般会用斜线来作为目录的分割符,甚至有些系统使用不同的字符作为分割符(例如反斜线)。
8)#include后面所包含的文件名就是文件名,例如abc*d.h这个文件,必须就要有abc*d.h这个文件,而不是abckkkd.h这些文件,*不能解释成任
何的字符的意思,而是实实在在的一个字符。
9)可以使用一个指定的名字作为#include指令后面的头文件,例如:
#define BOGHEADER "bog_3.h"
#include BOGHEADER
10)在#include 指令的后面,除了所包含的头文件和注释外,不能包含其它的任何东西了。
11)#line指令不能改变当前的工作目录。
12)-I-选项可以改变-I指定的搜索目录。
无论在哪里做什么,只要坚持服务、创新、创造价值,其他的东西自然都会来的。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析