g++는 컴파일된 소스 코드를 어디에 저장하나요?

g++는 컴파일된 소스 코드를 어디에 저장하나요?

Makefile과 g++를 사용하여 애플리케이션을 컴파일했는데 Makefile을 수정할 때(동적 링크 라이브러리의 경로를 변경함) g++가 전체 애플리케이션을 다시 컴파일할 필요가 없다는 것이 밝혀졌습니다. 그 당시에는 응용 프로그램이 성공적으로 컴파일되지 않았으므로 최종 실행 가능한 응용 프로그램을 사용할 수 없었습니다. 그러나 g++는 전체 애플리케이션을 다시 컴파일하지 않습니다.
이 정보나 편집 소스는 어디에 저장됩니까? /tmp에는 아무 것도 표시되지 않으며 내 홈 디렉터리나 응용 프로그램 자체의 루트 디렉터리에도 숨겨진 파일이 없습니다. (어쩌면 내가 충분히 좋아 보이지 않을 수도 있습니다).

답변1

GCC는 사용자(또는 이 경우 Makefile)가 ( -o출력 옵션을 사용하여) 지시하는 위치에 생성된 내용을 저장합니다. 컴파일 결과 자체는 캐시하지 않습니다.

부분 재컴파일을 가능하게 하는 것은 Makefile 자체입니다. 이는 일련의 대상(실행 파일, 개체 파일, 아마도 기타 항목)과 대상이 의존하는 대상 및 해당 종속성에서 대상을 생성하기 위한 규칙입니다.

make종속성 체인을 평가하고 아직 존재하지 않거나 대상보다 새로운 종속성을 갖는 대상을 다시 빌드하여 빌드해야 할 모든 것을 확인하세요.

예를 들어 다음과 같은 간단한 Makefile이 있다고 가정해 보겠습니다.

foo.o: foo.c foo.h
    gcc -o foo.o -c foo.c

foo: foo.o
    gcc -o foo foo.o

를 호출하면 Makefile이 무엇 에 의존 make foo하는지 보기 위해 Makefile을 살펴볼 것입니다 . 그래서 검색을 통해 이것이 및 에 의존한다는 것을 알게 됩니다 . 이 두 파일 중 하나가 오래되었거나 존재 하지 않으면 컴파일 라인이 실행 되어 .foofoo.ofoo.ofoo.cfoo.hfoo.ofoo.ogcc -o foo.o -c foo.cfoo.o

make foo그 후에 다시 실행 하면 foo.oC 파일과 헤더보다 최신이므로 make다시 컴파일되지 않고 foo.o최종 실행 파일 링크로 이동합니다(필요한 경우 조치가 필요하지 않다고 말할 수 있음).

답변2

Makefile이 일부 소스 코드를 빌드할 때 개별 g++명령을 살펴보세요. 이 -o옵션은 부분적으로 컴파일된 출력이 저장되는 위치를 보여줍니다.

컴파일하려면 C++ 소스 코드를 확인하세요. g++에 대한 마지막 호출은 아마도 연결 단계일 것이며 -o가장 일반적으로 바이너리 파일을 인수로 사용합니다.

관련 정보