programing

gcc는 C 및 C++ 헤더파일을 어디에서 검색합니까?

randomtip 2022. 12. 1. 23:31
반응형

gcc는 C 및 C++ 헤더파일을 어디에서 검색합니까?

Unix 시스템에서는 gcc는 헤더파일을 어디에서 검색합니까?

오늘 아침에 시스템 헤더 파일을 찾느라 시간이 좀 걸렸기 때문에 여기에 있는 것이 좋을 것 같습니다.

`gcc -print-prog-name=cc1plus` -v

이 명령어는 사용 중인 C++ 프리프로세서를 gcc에 문의하여 검색되는 프리프로세서에 포함 여부를 묻습니다.

특정 설정에 대한 신뢰할 수 있는 답변을 얻을 수 있습니다.

마찬가지로 C 프리프로세서의 경우:

`gcc -print-prog-name=cpp` -v

는 ,, gcc ,, 음음 the 음 the the the the the the the the 뒤에 지정된 합니다.-I★★★★★★ 。


컴파일러가 헤더 파일을 검색하는 경로 세트는 다음 명령으로 확인할 수 있습니다.-

cpp - v

#include " 라고 선언하면 컴파일러는 먼저 소스 파일의 현재 디렉토리를 검색하고 발견되지 않으면 위의 검색된 디렉토리를 계속 검색합니다.

#include <> 라고 선언하면 컴파일러는 위의 명령에서 얻은 디렉토리를 직접 검색합니다.

출처 : http://commandlinefanatic.com/cgi-bin/showarticle.cgi?article=art026

가짜 시스템 헤더를 포함하려고 하는 파일을 작성할 수 있습니다.이러한 소스에서 상세 모드로 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
g++ -print-search-dirs
gcc -print-search-dirs

시스템 헤더를 검색하는 디렉토리 세트 전체를 인쇄하려면 , 다음과 같이 기동합니다.

$ 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.-명 、 - 、 명 、 - 、 on - - on on 。

(the)sed명령어는 이 호출에 의해 출력되는 다른 모든 쓰레기를 제거하는 것입니다.LC_ALL=C「 」, 「 」를 하기 위해서입니다.sed명령어 작업 -- "Starts here" 및 "End of Search list" 문구는 변환된 IIRC입니다.)

GCC 매뉴얼CPP 섹션에는 헤더파일이 다음 디렉토리에 있는 경우가 있습니다.

GCC는 헤더를 여러 곳에서 검색합니다.일반 Unix 시스템에서는 별도로 지시하지 않으면 #include in으로 요청된 헤더를 검색합니다.

 /usr/local/include
 libdir/gcc/target/version/include
 /usr/target/include
 /usr/include

C++ 프로그램의 경우 먼저 /usr/include/g++-v3도 검색합니다.

이것들은 gcc가 지정된 헤더파일에 대해 디폴트로 검색하는 디렉토리입니다(헤더파일은 쉐브론<>; 1. /usr/local/include/ --- 서드파티제 헤더파일에 사용됩니다.2 . /usr / include / -- -- header header header for for used files files files usr / include / include / 。

위의 디렉토리 이외의 장소에 커스텀헤더 파일을 배치하는 경우는, 다음과 같이 포함할 수 있습니다.1 . using quotes ( . / custom _ header _ files / foo ) 。h")는 포함문의 쉐브론 대신 파일 경로를 포함합니다. 2. 코드를 컴파일할 때 -I 스위치를 사용합니다.gcc - I / home / user / custom _ headers / - c foo . c - p foo . o기본적으로 -I 스위치는 컴파일러에 (표준 디렉토리를 체크하기 전에) -I 스위치로 지정된 디렉토리를 참조하도록 지시합니다.I 스위치를 사용하는 경우 헤더 파일은 쉐브론을 사용하여 포함할 수 있습니다.

다음을 체크함으로써 C 프로그램의 (추가) 포함 경로를 bash에서 볼 수 있습니다.

echo $C_INCLUDE_PATH

이 값이 비어 있는 경우 다음과 같이 기본 포함 위치를 추가하도록 수정할 수 있습니다.

export C_INCLUDE_PATH=$C_INCLUDE_PATH:/usr/include

언급URL : https://stackoverflow.com/questions/344317/where-does-gcc-look-for-c-and-c-header-files

반응형