业务中遇到个问题,引用了 jsoncpp 这个库之后,需要引用其头文件,但其头文件进一步引用了 jsoncpp 安装位置的其他头文件,但如果一台 Linux 机器上在不同的路径安装了两个不同版本的 jsoncpp 库,并且这两个路径都是该项目的头文件包含路径,那么,编译器会先找哪个路径下的头文件呢?带着这个问题,我开始翻阅 camke 的官方文档,由于是全英文版,读起来还是很费劲,因此先翻译出来。
翻译完之后发现,include 的顺序跟翻译关系不大,因此,又将文档翻译写到了后半段,而把实验写到了前半段。
头文件搜索顺序
先说结论,编译器会按照 CMake 脚本给出的 include 路径顺序从头到尾(从左往右)依次搜索,如果在前面找到了相应的头文件,则不再去后面搜索。
实验
目录结构
文件内容
// include1/includea.h
int i = 1;
// include2/includea.h
int i = 2;
// src/src.cpp
#include "includea.h"
#include <iostream>
using namespace std;
int main()