여러 .cpp 파일을 동일한 실행 파일로 컴파일하는 이유는 무엇입니까?

여러 .cpp 파일을 동일한 실행 파일로 컴파일하는 이유는 무엇입니까?

왜 이런 짓을하는

g++ -Wall -I/usr/local/include/thrift *.cpp -lthrift -o something

바꾸다:

g++ -Wall -I/usr/local/include/thrift -c Something.cpp -o something.o
g++ -Wall -I/usr/local/include/thrift -c Something_server.cpp -o server.o
g++ -Wall -I/usr/local/include/thrift -c your_thrift_file_constants.cpp -o constants.o
g++ -Wall -I/usr/local/include/thrift -c your_thrift_file_types.cpp -o types.o

그런 다음:

g++ -L/usr/local/lib -lthrift *.o -o Something_server

내가 맞나요? 첫 번째 단계와 두 번째 단계는 본질적으로 동일한 효과를 가집니까?

또한 동일하게 만들려면 첫 번째 줄 something에 배치 해야 합니까?Something_server

답변1

당신 말이 맞습니다. (비록 이름은 다르지만) 동일한 실행 파일이 생성됩니다. 첫 번째 경우 gcc는 실제로 여러 개의 임시 개체 파일을 생성하고 링크한 후에 삭제합니다. 반면에 두 번째 경우에는 대상 파일을 직접 확인하세요.

두 번째 방법으로 작업을 수행하는 주된 이유는 다음과 같습니다.증분 건설. 프로젝트를 한 번 컴파일한 후 변경한다고 가정하면 영향을 Something.cpp받는 유일한 개체 파일은 something.o다른 파일을 다시 빌드하는 데 시간을 낭비할 이유가 없습니다. 이와 같은 빌드 시스템은 make이를 인식하고 something.o모든 개체 파일을 함께 연결하기 전에만 다시 빌드합니다.

관련 정보