[C++] Make로 g++ 병렬 컴파일하기
카테고리: C++
문제 상황
C/C++로 프로그래밍 한 결과를 실행하기 위해서는 gcc나 g++를 통해 컴파일해야한다. 하지만 소스코드의 길이가 짧거나 단순한 경우에는 아래와 같이 실행해도 컴파일하는데 시간이 오래걸리지 않지만, 일반적으로 방대한 프로젝트를 진행하는 경우에는 MakeFile
을 사용하여 컴파일과 링킹을 진행하는데 컴파일하는데만 10분이 넘게 걸리는 경우도 많다.
gcc -o "filename" filename.cpp
g++ -c filename.cc
문제 해결
알기론 매우 오래전 GNU Make 버전부터 병렬 컴파일 옵션인 make -j
를 지원하고 있었다. 보통 -j
뒤에는 사용하는 시스템의 CPU 논리 프로세서의 값만큼 할당해주는데, 리눅스 환경에서는 범용성을 위해 아래의 코드로 더 많이 사용한다.
make -j `cat /proc/cpuinfo | grep cores | wc -l`
이렇게만 모든게 해결된다면 좋겠지만, 병렬 컴파일을 하면 여러 소스코드를 동시에 빌드하므로 하나가 실패해도 나머지 작업은 계속될 수 있다. 그래서 에러가 발생해도 전체 빌드가 당장 멈추지 않는 현상이 생긴다. 이를 해결하기 위해서는 빌드 결과 출력이 섞이지 않게 해주는 --output-sync=target
와 빌드 실패 시 즉시 중단할 때 사용하는--fail-fast
를 적용해야 한다.
make -j `cat /proc/cpuinfo | grep cores | wc -l` --output-sync=target --fail-fast