g++ 컴파일 예제

헤더 와 비 헤더 파일은 프로그램을 빌드할 때 다르게 처리됩니다. 헤더가 아닌 각 파일은 다른 파일과 별도로 컴파일됩니다(그림 1). 이렇게 하면 특히 프로그램에서 버그를 수정하고 헤더가 아닌 파일하나 또는 두 개만 변경했을 때 컴파일 시간을 합리적으로 유지할 수 있습니다. 변경된 파일만 다시 컴파일하면 됩니다. 실제로 각 파일에 대해 별도의 컴파일 명령을 입력할 필요가 없습니다. 당신은 한 단계로 모든 일을 할 수 있습니다 : 그러나 단계별 절차는 에 들어갈 수있는 좋은 습관이다. 코드 디버깅을 시작하면 한 번에 하나의 파일만 변경할 수 있습니다. 예를 들어 file2.cpp에서 버그를 찾아 수정하는 경우 해당 파일을 다시 컴파일하고 다시 연결하면 최종 프로그램을 형성하기 위해 함께 연결되는 모든 컴파일레이션에서 컴파일러에서 한 번만 정의를 볼 수 있어야 합니다. 정의는 그 자체로 선언이기도 합니다(즉, 아직 선언되지 않은 것을 정의하는 경우 괜찮습니다. 정의는 선언 및 정의로 이중 의무를 제공합니다.) g++ 명령은 GNU c++ 컴파일러 호출 명령으로, 소스 코드의 전처리, 컴파일, 어셈블리 및 링크에 사용되어 실행 파일 파일을 생성합니다. g ++ 명령의 다른 « 옵션 »을 사용하면 중간 단계에서이 프로세스를 중지 할 수 있습니다. 컴파일 단위가 컴파일되면 일반적으로 « .o »로 끝나는 개체 코드 파일이 표시됩니다. 이러한 파일은 « 거의 » 실행 가능한 이진 파일입니다 – 일부 변수 및 함수의 경우 해당 변수 / 함수의 실제 주소 대신 여전히 이름이 있습니다.

이는 변수 또는 함수가 선언되었지만 해당 컴파일 단위에 정의되지 않은 경우 발생합니다(사전 프로세서에 의한 #includes 확장 후). 해당 이름은 해당 이름의 정의가 포함된 파일이 컴파일될 때만 주소가 할당됩니다. 그리고 해당 주소는 이름이 정의된 컴파일 단위 소스 파일에 해당하는 개체 코드 파일에만 기록됩니다. 이러한 컴파일러의 또 다른 유용한 옵션은 -D입니다. 옵션 -Dname=value를 추가하면 프로그램의 식별자 이름의 모든 발생이 값으로 바뀝니다. 이 기능은 프로그램을 편집하지 않고 사용자 지정하는 방법으로 유용할 수 있습니다. 값 -Dname 없이이 옵션을 사용 하는 경우 컴파일러는 여전히 해당 이름이 « 정의 »되었습니다. 이 기능은 컴파일러 지시문 #ifdef 함께 사용하면 특정 이름이 정의된 경우에만 특정 코드가 컴파일됩니다. 예를 들어 많은 프로그래머가 디버깅 출력을 코드에 이런 식으로 삽입합니다: 이 컴파일의 출력은 MyProgram.class(그리고 다른 .class 파일도 마찬가지)라는 파일이 됩니다. 이와 같은 조각으로 프로그램을 분할하는 것은 무엇보다도, 무엇을 변경할 수있는 사람에 대한 책임을 분할하고 함수 본문을 변경 한 후 수행해야 하는 컴파일의 양을 줄일 수 있습니다.