GCC 기본 포함 디렉토리는 무엇입니까?


131

gcc로 매우 간단한 소스 파일을 컴파일 할 때 stdio 또는 stdlib와 같은 표준 포함 파일의 경로를 지정할 필요가 없습니다.

GCC는 이러한 파일을 찾는 방법을 어떻게 알 수 있습니까?

/usr/include내부에 배선 된 경로 가 있습니까 , 아니면 다른 OS 구성 요소에서 경로를 가져 옵니까?

답변:


188

gcc/ g++에 의해 사용되는 기본 경로 와 그 우선 순위를 파악하려면 다음 명령의 출력을 검사해야합니다.

  1. 의 경우 C :
    gcc -xc -E -v -
  1. 들어 ++ C :
    gcc -xc++ -E -v -

크레딧은 Qt Creator 팀에 전달 됩니다.


5
cpp -v /dev/null -o /dev/null
Nehal J Wani

36

더 짧은 출력을 가진 명령이 있는데, 단일 공백으로 시작하여 줄에서 포함 경로를 자동으로자를 수 있습니다.

$ 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.

크레딧은 libc ++ front-page로 갑니다.


1

C ++을 고려한 Ihor Kaharlichenko의 대답과 출력의 압축성에 대한 abyss.7의 대답에 동의하지만 입력 처리는 명령 줄 매개 변수 및 매크로에 따라 다르므로 gcc의 다중 아키텍처 버전에서는 여전히 불완전 합니다.

예:

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\ - -fsyntax-only 수확량


/opt/gcc-arm-none-eabi-9-2019-q4-major/bin/../arm-none-eabi/include/newlib-nano                                                                                                              
/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                                                                        
/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                                         
/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                                                               
/opt/gcc-arm-none-eabi-9-2019-q4-major/bin/../lib/gcc/arm-none-eabi/9.2.1/include                                                                                                            
 /opt/gcc-arm-none-eabi-9-2019-q4-major/bin/../lib/gcc/arm-none-eabi/9.2.1/include-fixed                                                                                                      
/opt/gcc-arm-none-eabi-9-2019-q4-major/bin/../lib/gcc/arm-none-eabi/9.2.1/../../../../arm-none-eabi/include                                                                                  

반면 echo | /opt/gcc-arm-none-eabi-9-2019-q4-major/bin/arm-none-eabi-g++ -x c++ -E -Wp,-v - -fsyntax-only수확량


/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                                                                        
/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                                                          
/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                                                               
/opt/gcc-arm-none-eabi-9-2019-q4-major/bin/../lib/gcc/arm-none-eabi/9.2.1/include                                                                                                            
/opt/gcc-arm-none-eabi-9-2019-q4-major/bin/../lib/gcc/arm-none-eabi/9.2.1/include-fixed                                                                                                      
/opt/gcc-arm-none-eabi-9-2019-q4-major/bin/../lib/gcc/arm-none-eabi/9.2.1/../../../../arm-none-eabi/include                                                                                  

전자의 호출은 newlib(출력의 1 행과 3 행 참조), 후자는 표준 include를 사용합니다. 목록 끝에있는 공통 파일은의 사용법에 대한 예입니다 include_next.

결론 : include 디렉토리를 인쇄 할 때는 항상 모든 매크로컴파일러 옵션을 고려하십시오 .


1

기본 검색 경로를 나열하려면 다음을 실행하십시오.

$(gcc -print-prog-name=cc1) -v

포함 경로는 나열되지 않습니다. 프로그램 경로 및 라이브러리 경로 만
kayahr

cc1일반적으로 PATH에없는 내부 명령이므로 직접 호출 할 수 없습니다. 파일을 찾을 위치를 설명하기 위해 답을 편집하고 싶을 수도 있습니다.
kayahr
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.