什么是GCC默认包含目录?

Rax*_*van 117 c c++ linux gcc include-path

当我使用gcc编译一个非常简单的源文件时,我不必指定标准包含文件的路径,例如stdio或stdlib.

GCC如何知道如何找到这些文件?

它是否在/usr/include内部硬连线,或者它将从其他OS组件获取路径?

Iho*_*nko 166

为了找出gcc/ 使用的默认路径g++及其优先级,您需要检查以下命令的输出:

  1. 对于C:
    gcc -xc -E -v -
Run Code Online (Sandbox Code Playgroud)
  1. 对于C++:
    gcc -xc++ -E -v -
Run Code Online (Sandbox Code Playgroud)

归功于Qt Creator团队.

  • `cpp -v/dev/null -o/dev/null` (4认同)

aby*_*s.7 33

有一个输出较短的命令,允许从单行空间开始自动剪切行中的包含:

$ echo | gcc -Wp,-v -x c++ - -fsyntax-only
ignoring nonexistent directory "/usr/lib/gcc/x86_64-redhat-linux/4.8.2/include-fixed"
ignoring nonexistent directory "/usr/lib/gcc/x86_64-redhat-linux/4.8.2/../../../../x86_64-redhat-linux/include"
#include "..." search starts here:
#include <...> search starts here:
 /usr/lib/gcc/x86_64-redhat-linux/4.8.2/../../../../include/c++/4.8.2
 /usr/lib/gcc/x86_64-redhat-linux/4.8.2/../../../../include/c++/4.8.2/x86_64-redhat-linux
 /usr/lib/gcc/x86_64-redhat-linux/4.8.2/../../../../include/c++/4.8.2/backward
 /usr/lib/gcc/x86_64-redhat-linux/4.8.2/include
 /usr/local/include
 /usr/include
End of search list.
Run Code Online (Sandbox Code Playgroud)

归功于libc ++ 首页.

  • 使用 `/dev/null` 而不是 `-`,您将不需要管道 (3认同)

Joh*_*ulé 15

总结一下其他答案:

对于 C++:

c++ -xc++ /dev/null -E -Wp,-v 2>&1 | sed -n 's,^ ,,p'

对于C:

cc -xc /dev/null -E -Wp,-v 2>&1 | sed -n 's,^ ,,p'

  • 我建议将其设为社区维基。 (2认同)

her*_*nnk 5

虽然我同意 Ihor Kaharlichenko\xe2\x80\x99s 考虑 C++ 的答案,并同意 abyss.7\xe2\x80\x99s 对其输出紧凑性的回答,但对于gcc 的多架构版本来说,它们仍然不完整,因为输入处理取决于命令行参数和宏。

\n\n

例子:

\n\n

echo | /opt/gcc-arm-none-eabi-9-2019-q4-major/bin/arm-none-eabi-g++ -specs=nano.specs -mcpu=cortex-m4 -march=armv7e-m -mthumb -mfloat-abi=soft -x c++ -E -Wp,-v\\\n - -fsyntax-only产量

\n\n
\xe2\x8b\xae\n/opt/gcc-arm-none-eabi-9-2019-q4-major/bin/../arm-none-eabi/include/newlib-nano                                                                                                              \n/opt/gcc-arm-none-eabi-9-2019-q4-major/bin/../lib/gcc/arm-none-eabi/9.2.1/../../../../arm-none-eabi/include/c++/9.2.1                                                                        \n/opt/gcc-arm-none-eabi-9-2019-q4-major/bin/../lib/gcc/arm-none-eabi/9.2.1/../../../../arm-none-eabi/include/c++/9.2.1/arm-none-eabi/thumb/v7e-m/nofp                                         \n/opt/gcc-arm-none-eabi-9-2019-q4-major/bin/../lib/gcc/arm-none-eabi/9.2.1/../../../../arm-none-eabi/include/c++/9.2.1/backward                                                               \n/opt/gcc-arm-none-eabi-9-2019-q4-major/bin/../lib/gcc/arm-none-eabi/9.2.1/include                                                                                                            \n /opt/gcc-arm-none-eabi-9-2019-q4-major/bin/../lib/gcc/arm-none-eabi/9.2.1/include-fixed                                                                                                      \n/opt/gcc-arm-none-eabi-9-2019-q4-major/bin/../lib/gcc/arm-none-eabi/9.2.1/../../../../arm-none-eabi/include                                                                                  \n\xe2\x8b\xae\n
Run Code Online (Sandbox Code Playgroud)\n\n

echo | /opt/gcc-arm-none-eabi-9-2019-q4-major/bin/arm-none-eabi-g++ -x c++ -E -Wp,-v - -fsyntax-only产量

\n\n
\xe2\x8b\xae\n/opt/gcc-arm-none-eabi-9-2019-q4-major/bin/../lib/gcc/arm-none-eabi/9.2.1/../../../../arm-none-eabi/include/c++/9.2.1                                                                        \n/opt/gcc-arm-none-eabi-9-2019-q4-major/bin/../lib/gcc/arm-none-eabi/9.2.1/../../../../arm-none-eabi/include/c++/9.2.1/arm-none-eabi                                                          \n/opt/gcc-arm-none-eabi-9-2019-q4-major/bin/../lib/gcc/arm-none-eabi/9.2.1/../../../../arm-none-eabi/include/c++/9.2.1/backward                                                               \n/opt/gcc-arm-none-eabi-9-2019-q4-major/bin/../lib/gcc/arm-none-eabi/9.2.1/include                                                                                                            \n/opt/gcc-arm-none-eabi-9-2019-q4-major/bin/../lib/gcc/arm-none-eabi/9.2.1/include-fixed                                                                                                      \n/opt/gcc-arm-none-eabi-9-2019-q4-major/bin/../lib/gcc/arm-none-eabi/9.2.1/../../../../arm-none-eabi/include                                                                                  \n\xe2\x8b\xae\n
Run Code Online (Sandbox Code Playgroud)\n\n

前者调用使用newlib(参见输出的第 1 行和第 3 行),后者则使用标准包含。列表末尾的常用文件是include_next.

\n\n

底线:打印包含目录时始终考虑所有编译器选项。

\n