g++ 头文件位置查找的一个顺序问题

作者: , 共 389 字

最近在编译程序时,总是遇到一个重复编译的问题。理论上程序源代码并没有变动,但 make 程序却经常触发编译。在 AI 的帮助下,定位到了 g++ 头文件位置查找的一个诡异的顺序问题。

假设这个 C++代码test.cpp里面有一个 #include <util/test.hpp>。这个 util/test.hpp 位于./,而且也复制部署在 /opt目录下。

我们的编译脚本是:

g++ test.cpp -o test.o -I ./ -I /opt/ -isystem ./

猜猜最后引用的 util/test.hpp 是哪个文件?

准确答案是 /opt/util/test.hpp

原因是 -isystem ./ 会将当前目录从 -I 中删除。最后 g++查找的顺序变成了 -i /opt/ -isystem ./。然后-i /opt/将被优选选中。

Q. E. D.

碎碎念 »
春节前,绿野童军小程序收到如下通知: