2015. 7. 27. 15:23

하나의 Makefile로 여러 개의 대상 파일들을 생성하거나 여러가지 작업들을 선택적으로 수행하는 게 바람직한 경우도 종종 있다

다음 실습에서는 기존의 Makefile에 불필요한 목적 파일들을 삭제하는 clean 대상과 최종 응용프로그램을 다른 디렉토리로 옮기는 install 대상을 추가한다


clean - 대상을 rm 명령을 이용해서 목적 파일들을 삭제

그런데 rm 앞에 -를 붙였기 때문에 make는 rm이 보고한 오류를 무시한다

따라서 목적파일들이 없어서 rm이 오류를 돌려준 경우에도 make는 작업을 계속 진행하게 된다.


clean:

-rm main.o 2.o 3.o


또 clean 대상의 : 다음에 아무 것도 없다는 점 역시 주목하기 바란다


이는 make에게 이 clean 대상은 어떠한 것에도 의존하지 않음을 알려주는 역할을 한다. 이 경우는 make는 clean 대상이 항상 낡은 것이라고 간주하며, 따라서 make 실행 시 clean을 지정하면 항상 이 대상의 규칙이 실행된다


install 대상의 규칙은 myapp에 의존한다. 따라서 make는 이 대상의 규칙을 실행하기 전에 반드시 myapp을 만든다. 이 대상의 규칙은 셸 스크립트 형태이다. make는 규칙을 실행할 때 셸을 호출하며 각 규칙에 대해 새로운 셸을 사용하므로, 스크립트 명령들 전부가 하나의 논리적인 스크립트 문장으로 실행되도록 각 줄 끝에 \를 붙였다. 또한 이 문장은 @로 시작하므로, make는 이 문장을 출력하지 않고 실행한다.


install 대상의 규칙은 응용 프로그램이 최종적인 장소에 설치될 때까지 여러 개의 명령들을 차례대로 수행한다. 그런데 이 규칙이 한 명령의 성공 여부로 그 다음 명령의 수행 여부를 결정하는 것은 아니다. 만일 한 명령이 성공적으로 수행된 경우에만 다음 명령이 수행되길 원한다면 다음 예처럼 &&로 명령들을 연결해야 한다