Resources/Documents
병렬 컴파일이 가능하기 위한 Makefile 작성 규칙에 대한 고찰
알 수 없는 사용자
2009. 12. 19. 13:43
병렬 컴파일이 가능하기 위해서는 프로그래머가 Makefile을 작성하는 단계에서부터 아래와 같은 사항들을 염두에 두어야 한다.
첫째, 각각의 job이 가장 작은 단위로 생성될 수 있도록 고려해야만 한다. 일반적으로 각각의 job이 하나의 소스파일만을 컴파일하도록 하면 될 것이다.
둘째, 전체 빌드의 서브 단계들의 순서를 명확히 명시해 주어야 한다. 예를 들면, 오브젝트 파일이 모두 생성된 이후에 링킹이 이루어 져야하기 때문에, 이 경우에 일단 오브젝트 파일 생성 단계와 링킹 단계를 구분한 후에 그 순서를 규정해 주어야 한다. 아래의 '잘못된 예'는 'make'와 같이 job을 하나씩 처리할 때는 문제가 없지만, 'make -j 4' 와 같이 여러개의 job을 동시에 처리할 때는 오브젝트 파일 생성과 링킹 작업을 동시에 하려고 시도함으로써 빌드가 실패하는 경우이다.
첫째, 각각의 job이 가장 작은 단위로 생성될 수 있도록 고려해야만 한다. 일반적으로 각각의 job이 하나의 소스파일만을 컴파일하도록 하면 될 것이다.
둘째, 전체 빌드의 서브 단계들의 순서를 명확히 명시해 주어야 한다. 예를 들면, 오브젝트 파일이 모두 생성된 이후에 링킹이 이루어 져야하기 때문에, 이 경우에 일단 오브젝트 파일 생성 단계와 링킹 단계를 구분한 후에 그 순서를 규정해 주어야 한다. 아래의 '잘못된 예'는 'make'와 같이 job을 하나씩 처리할 때는 문제가 없지만, 'make -j 4' 와 같이 여러개의 job을 동시에 처리할 때는 오브젝트 파일 생성과 링킹 작업을 동시에 하려고 시도함으로써 빌드가 실패하는 경우이다.
잘못된 예 | 올바른 예 |
# in Makefile all : obj app obj : gcc -c test.c app : gcc -o test test.o | # in Makefile all : app obj : gcc -c test.c app : obj gcc -o test test.o |