cpp预处理器如何从子目录

时间:2015-07-31 18:26:50

标签: c++ g++ c-preprocessor

我想以免责声明开始我的问题,我是初学c ++。

我的问题是预处理器在查找头文件时如何知道要查找的目录。

我知道它会搜索某些特定的预定义位置以及我们在g ++编译步骤中作为-I传递的内容。然而令我困惑的是,即使它们不在那些位置,也会拾取一些标准标题。

我在Finding out what the GCC include path is提到了问题,然后我按照那里的步骤进行了操作。

$ /usr/include % echo | cpp -Wp,-v 
ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu"
ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/4.9/../../../../x86_64-linux-gnu/include"
#include "..." search starts here:
#include <...> search starts here:
 /usr/lib/gcc/x86_64-linux-gnu/4.9/include
 /usr/local/include
 /usr/lib/gcc/x86_64-linux-gnu/4.9/include-fixed
 /usr/include/x86_64-linux-gnu
 /usr/include
End of search list.
# 1 "<stdin>"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "/usr/include/stdc-predef.h" 1 3 4
# 1 "<command-line>" 2
# 1 "<stdin>"

但我试图找到iostream,我看到了

$ locate iostream
/usr/include/c++/4.8/iostream

它位于/usr/include/c++/4.8/iostream,但搜索路径以/usr/include结尾。如果它是任何其他头文件,我将不得不包括它 #include <c++/4.8/iostream>,但在我使用#include <iostream>的所有程序中。

PS:我问这个问题的原因是因为我不小心删除了/usr/include/c++/4.9目录,它在删除之前就已经工作了。但它并没有提升usr/include/c++/4.8/cstddef。我想了解获取c ++预处理器的正确包含路径的过程。

谢谢

1 个答案:

答案 0 :(得分:2)

他们已编入。请确保指定正确的语言。

$ echo | cpp -Wp,-v -x c++
ignoring nonexistent directory "/usr/lib/gcc/x86_64-redhat-linux/4.9.2/include-fixed"
ignoring nonexistent directory "/usr/lib/gcc/x86_64-redhat-linux/4.9.2/../../../../x86_64-redhat-linux/include"
#include "..." search starts here:
#include <...> search starts here:
 /usr/lib/gcc/x86_64-redhat-linux/4.9.2/../../../../include/c++/4.9.2
 /usr/lib/gcc/x86_64-redhat-linux/4.9.2/../../../../include/c++/4.9.2/x86_64-redhat-linux
 /usr/lib/gcc/x86_64-redhat-linux/4.9.2/../../../../include/c++/4.9.2/backward
 /usr/lib/gcc/x86_64-redhat-linux/4.9.2/include
 /usr/local/include
 /usr/include
End of search list.
# 1 "<stdin>"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "/usr/include/stdc-predef.h" 1 3 4
# 1 "<command-line>" 2
# 1 "<stdin>"