C++ 프로젝트가 커지면 코드를 여러 파일로 나누어 관리하게 됩니다. 이때 헤더 파일(.h)과 소스 파일(.cpp)을 각각 따로 컴파일해야 한다면 번거로울 수 있습니다. 다행히 G++ 컴파일러를 사용하면 여러 파일을 한 번의 명령으로 함께 컴파일할 수 있습니다.
기본 문법
여러 개의 파일을 동시에 컴파일하려면 파일 이름들을 공백으로 구분하여 나열하면 됩니다. 예를 들어 file_name.h와 file_name.cpp 같은 파일들을 한꺼번에 처리할 때 명령어 형식은 다음과 같습니다.
g++ abc.h xyz.cpp
컴파일이 정상적으로 완료되면 기본 실행 파일인 a.out이 생성됩니다. 아래 명령으로 프로그램을 실행할 수 있습니다.
./a.out
예제 1: 헤더 파일 작성
먼저 함수 오버로딩(function overloading)을 활용한 area.h 헤더 파일을 작성해 보겠습니다. 이 파일에는 원의 넓이를 계산하는 함수와 사각형의 넓이를 계산하는 함수가 매개변수 개수만 다르게 정의되어 있습니다.
float area(float r){
return (3.1415*r*r); // 원의 넓이
}
float area(float l, float w){
return (l * w); // 사각형의 넓이
}같은 이름의 area 함수가 두 개 존재하지만, 인자의 개수가 다르기 때문에 C++의 함수 오버로딩 기능에 의해 호출 시 전달되는 인자에 따라 적절한 함수가 자동으로 선택됩니다.
예제 2: 메인 소스 파일 작성
다음으로 find_area.cpp 파일에서 위에서 만든 헤더 파일을 포함(include)하여 함수를 호출합니다.
#include <iostream>
#include "area.h"
using namespace std;
main(){
cout << "반지름이 2.5인 원의 넓이는: " << area(2.5) << endl;
cout << "가로 5, 세로 7인 사각형의 넓이는: " << area(5, 7) << endl;
}주목할 점은 표준 라이브러리인 <iostream>은 꺾쇠 괄호(< >)로 포함하지만, 직접 작성한 "area.h"는 큰따옴표(" ")로 포함한다는 것입니다. 큰따옴표를 사용하면 컴파일러가 현재 디렉터리에서 먼저 해당 파일을 찾습니다.
컴파일 및 실행 결과
이제 두 파일을 한 번의 명령으로 컴파일하고 실행해 보겠습니다.
$ g++ area.h find_area.cpp $ ./a.out Area of circle with radius 2.5 is: 19.6344 Area of rectangle with length and width are 5 and 7 is: 35 $
실행 결과를 보면 반지름 2.5인 원의 넓이는 약 19.6344(3.1415 × 2.5 × 2.5)로 계산되었고, 가로 5, 세로 7인 사각형의 넓이는 35로 정확히 출력된 것을 확인할 수 있습니다.
정리
- G++에서는
g++ 파일1 파일2 ...형태로 여러 파일을 공백으로 구분하여 한 번에 컴파일할 수 있습니다. - 컴파일 결과로 생성되는 기본 실행 파일은
a.out이며,-o옵션을 사용하면 실행 파일 이름을 지정할 수도 있습니다(예:g++ area.h find_area.cpp -o find_area). - 헤더 파일에는 함수 선언이나 정의를 두고, 필요한 소스 파일에서
#include로 불러와 재사용성을 높일 수 있습니다.
이처럼 G++를 활용하면 여러 파일로 구성된 C++ 프로젝트도 간단한 명령 하나로 손쉽게 빌드할 수 있습니다.