gcc compile 연습문제
01-01. 다음 순서에 따라 수행하고 설명한다.
test.c 파일을 컴파일하여 test0 실행 파일을 만든다.
test.c 파일을 최적화 컴파일하여 test1 실행 파일을 만든다. (옵션 -O1 사용)
test.c 파일을 최적화 컴파일하여 test2 실행 파일을 만든다. (옵션 -O2 사용)
test.c 파일을 최적화 컴파일하여 test3 실행 파일을 만든다. (옵션 -O3 사용)
diff 명령어를 사용하여 test0, test1, test2, test3가 같은지 다른지 확인한다.
01-02. 위 실행파일들의 수행 시간을 time 명령어로 측정 및 비교한다.
최적화 컴파일을 하지 않은 test0에서는 가장 느린 속도를 보였고 최적화 컴파일 -O1옵션으로 컴파일하니 속도가 빨라졌다.
-O2옵션에서는 가장 빠른 속도를 보여서 -O3옵션에서 더 빨라지지는 않았다.
diff 명령을 사용했을 때 test2와 test3는 차이를 보이지 않았다.
02-01. makefile의 예이다. ____에 가장 적절한 표현은 무엇인가?
목적파일 testMain.o와 testAdd.o와 testSub.o와 testMul.o가 실행파일 test에 의존하고 있고 소스파일 testMain.c와 testAdd.c와 testSub.c와 test.Mul.c가 위 목적파일 4개에 의존하고 있다.
따라서 빈칸에 들어갈 내용으로는 순서대로 testSub.o와 gcc -c testMul.c가 들어가야 한다.
02-02. 다음과 같은 파일 dependency가 있을 때의 makefile을 작성하여 실행하라. (make)
소스파일을 컴파일하고 오브젝트 파일, 실행파일이 구조에 맞게 각각 의존된 상태로 생성되었다.
02-03. 소스의 수정(공란 추가)후 다시 make 해 보자. 전체가 다시 작업되는가?
writeA.c 파일에 빈 줄을 추가하고 make한 결과 writeA.c를 다시 컴파일하였고 그에 따라 의존관계에 있는 실행파일이 재생성된 것을 확인할 수 있었다.
02-04. make 명령으로 생성된 파일들을 모두 지운 후 다시 make 해 보자.
02-05. make 명령으로 생성된 파일들 중 실행파일만 모두 지운 후 다시 make 명령을 실행하라.
02-06. make 명령으로 생성된 파일들 중 object 파일만 모두 지운 후 다시 make 명령을 실행하라.
위 결과들에 대해서 설명하라. 수정된 부분만 다시 작업하는 make 시스템의 동작을 파악하는 문제이다.
소스파일을 수정하면 make를 동작했을 때 관련된 의존 파일들을 다시 생성하게 된다.
이것에 대한 이점은 일일이 파일들을 다시 컴파일하는 것에 비해 시간적 효율성이 극대화된다는 점이다.
마지막 문항에서는 Phony Targets으로 cleanAll, cleanOBJ, cleanEXC을 설정하고 cleanAll에는 make로 생성되는 파일들을 변수로 묶어 rm -f 명령을 실행하도록 입력했다.
cleanOBJ에는 생성된 오브젝트 파일들만 변수로 묶어 rm -f 명령을 실행하도록 하였고 cleanEXC에는 생성된 실행파일들만 변수로 묶어 rm -f 명령을 실행하도록 하였다.
삭제 이후에 make 명령을 재실행하니 makefile로 인해 파일들이 다시 생성되었다.