답변:
`gcc -print-prog-name=cc1plus` -v
이 명령은 gcc에게 사용중인 C ++ 전처리기를 요청한 다음 포함 할 전처리기를 묻습니다.
특정 설정에 대한 신뢰할 수있는 답변을 얻을 수 있습니다.
마찬가지로 C 전 처리기의 경우 :
`gcc -print-prog-name=cpp` -v
cpp
대신 cc1
? 내 데비안 제시에 $(gcc -print-prog-name=cpp) -v
(제대로)은 또 하나 개의 경로 제공/usr/include/x86_64-linux-gnu
/dev/null
, 그래서 `gcc -print-prog-name=cc1` -v < /dev/null
.
Ctrl
+를 누르면 D
Unix-talk에서 "파일 끝"이 전송됩니다.
또한 gcc는 -I
옵션 뒤에 지정된 디렉토리를 찾습니다 .
가짜 시스템 헤더를 포함시키려는 파일을 작성할 수 있습니다. 이러한 소스에서 상세 모드로 gcc를 실행하면 가짜 헤더를 찾을 때 모든 시스템 포함 위치가 나열됩니다.
$ echo "#include <bogus.h>" > t.c; gcc -v t.c; rm t.c
[..]
#include "..." search starts here:
#include <...> search starts here:
/usr/local/include
/usr/lib/gcc/i686-apple-darwin9/4.0.1/include
/usr/include
/System/Library/Frameworks (framework directory)
/Library/Frameworks (framework directory)
End of search list.
[..]
t.c:1:32: error: bogus.h: No such file or directory
echo "#include <bogus.h>" | gcc -v -x c -
gcc -v -E - < /dev/null
또는 cpp -v < /dev/null
충분하다. 전처리기를 실행 해야합니다. 입력 내용은 중요하지 않습니다. (검색 경로는 입력을보기 전에 시작하는 동안 인쇄됩니다.)
GCC 매뉴얼 의 CPP 섹션 은 헤더 파일이 다음 디렉토리에있을 수 있음을 나타냅니다.
GCC는 여러 곳에서 헤더를 찾습니다. 일반적인 유닉스 시스템에서는 달리 지시하지 않으면 #include에서 다음과 같이 요청 된 헤더를 찾습니다.
/usr/local/include
libdir/gcc/target/version/include
/usr/target/include
/usr/include
C ++ 프로그램의 경우 먼저 / usr / include / g ++-v3을 살펴 봅니다.
GCC가 시스템 헤더를 찾을 디렉토리의 전체 세트를 인쇄하게하려면 다음과 같이 호출하십시오.
$ LC_ALL=C gcc -v -E -xc - < /dev/null 2>&1 |
LC_ALL=C sed -ne '/starts here/,/End of/p'
양식의 출력을 생성합니다
#include "..." search starts here:
#include <...> search starts here:
/usr/lib/gcc/x86_64-linux-gnu/5/include
/usr/local/include
/usr/lib/gcc/x86_64-linux-gnu/5/include-fixed
/usr/include/x86_64-linux-gnu
/usr/include
End of search list.
-I
명령 행에 -family 옵션 이 있으면 출력되는 내용에 영향을줍니다.
(이 sed
명령은 이 호출이 인쇄 하는 다른 모든 정크를 제거 LC_ALL=C
하고 sed
명령이 작동 하는지 확인하는 것입니다 . "여기에서 시작"및 "검색 목록 끝"문구 가 IIRC 로 번역됩니다.
g++ -print-search-dirs
gcc -print-search-dirs
컴파일러가 헤더 파일을 찾는 경로 세트는 다음 명령으로 확인할 수 있습니다.
cpp -v
#include "" 를 선언하면 하면 컴파일러는 먼저 소스 파일의 현재 디렉토리를 검색하고 찾지 못한 경우 위의 검색된 디렉토리에서 계속 검색합니다.
#include <> 를 선언하면 하면 컴파일러는 위 명령에서 얻은 디렉토리에서 직접 검색합니다.
출처 : -http : //commandlinefanatic.com/cgi-bin/showarticle.cgi ? article=art026
다음을 확인하여 bash에서 C 프로그램의 (추가) 포함 경로를 볼 수 있습니다.
echo $C_INCLUDE_PATH
비어있는 경우 다음을 통해 기본 포함 위치를 추가하도록 수정할 수 있습니다.
export C_INCLUDE_PATH=$C_INCLUDE_PATH:/usr/include
헤더 파일이 갈매기 형 <>에 포함되어있는 경우 gcc가 지정된 헤더 파일에 대해 기본적으로 찾는 디렉토리입니다. 1. / usr / local / include /-타사 헤더 파일에 사용됩니다. 2. / usr / include /-시스템 헤더 파일에 사용됩니다.
위에서 언급 한 디렉토리 이외의 위치에 사용자 정의 헤더 파일을 배치하기로 결정한 경우 다음과 같이 포함 할 수 있습니다. 1. 쉐브론 대신 파일 경로와 함께 따옴표 ( "./custom_header_files/foo.h") 사용 include 문에서. 2. 코드를 컴파일 할 때 -I 스위치를 사용하십시오. gcc -I / home / user / custom_headers / -c foo.c -p foo.o 기본적으로 -I 스위치는 컴파일러에게 -I 스위치로 지정된 디렉토리를 먼저 찾도록 지시합니다 (표준 디렉토리를 확인하기 전에). -I 스위치를 사용하면 쉐브론을 사용하여 헤더 파일이 포함될 수 있습니다.