一个程序能正确编译、链接、运行需要满足3个条件:预处理时能找到头文件,连接时能找到库(静态库或动态库),运行时能找到库
1、头文件的搜索路径
头文件通常以.h
结尾,有两种写法:双引号
和尖括号
(当然也可以直接写绝对路径,那就不会有查找路径的问题了),如下:
#include <iostream>
#include "demo.h"
它们查找路径的顺序是有区别的,双引号形式会查找当前路径,而尖括号形式不会,具体查找顺序为:
- 当前目录(仅双引号形式)
- 编译时指定的路径(使用
CMake
编译时,target_include_directories
配置的搜索路径 >include_directories
配置的搜索路径;使用gcc编译时,gcc -I
指定的搜索路径) - 系统环境变量
CPLUS_INCLUDE_PATH
(C++
中) 或C_INCLUDE_PATH
(C
中)指定的目录 gcc
默认目录:gcc
的默认目录可通过echo | g++ -v -x c++ -E -
查看
~: echo | g++ -v -x c++ -E -
...
#include "..." search starts here:
#include <...> search starts here:
/usr/include/c++/11
/usr/include/x86_64-linux-gnu/c++/11
/usr/include/c++/11/backward
/usr/lib/gcc/x86_64-linux-gnu/11/include
/usr/local/include
/usr/include/x86_64-linux-gnu
/usr/include
...
例如:这里会从 /usr/include/c++/11
目录依次找到 /usr/include
目录
评论 (0)