카테고리:

1 분 소요

문제 상황

C/C++로 프로그래밍 한 결과를 실행하기 위해서는 gcc나 g++를 통해 컴파일해야한다. 하지만 소스코드의 길이가 짧거나 단순한 경우에는 아래와 같이 실행해도 컴파일하는데 시간이 오래걸리지 않지만, 일반적으로 방대한 프로젝트를 진행하는 경우에는 MakeFile을 사용하여 컴파일과 링킹을 진행하는데 컴파일하는데만 10분이 넘게 걸리는 경우도 많다.

gcc -o "filename" filename.cpp

g++ -c filename.cc

문제 해결

알기론 매우 오래전 GNU Make 버전부터 병렬 컴파일 옵션인 make -j를 지원하고 있었다. 보통 -j뒤에는 사용하는 시스템의 CPU 논리 프로세서의 값만큼 프로그래머가 할당해야 하는데, 리눅스 환경에서는 범용성을 위해 아래의 코드로 더 많이 사용한다.

make -j$(nproc)

추가로, 병렬 컴파일을 하면 여러 소스코드를 동시에 빌드하므로 출력 결과가 뒤죽박죽되어 알아보기 힘들 수 있다. 물론 이것도 --output-sync=target를 통해 출력을 동기화하여 가독성을 개선할 수 있다.

make -j$(nproc) --output-sync=target

태그: C, C++, cc, cpp, g++, gcc, gnu, grep, make, makefile, nproc, 병렬, 빌드, 컴파일

업데이트: