# Steve Talbott

[make] # 5. 프로젝트 관리
make 는 그 자체로 무척 강력하나 다음과 같은 상황에서 다양한 문제를 야기할 수 있다: 하나 이상의 디렉토리를 사용 하는 과정 작성. make 가 여러 디렉토리에서 의존 관계를 확인하고, 확장자 규칙을 적용하려면 별도의 작업이 필요하다. 컴파일러 옵션을 변경하는 경우. #if 와 같은 조건부 전처리기 지시자를 사용하는 경우에는 매우 복잡해질 수 있다. 표시되지 않은 의존 관계, 특히 .h 헤더 파일과 관련된 의존 관계. make 에 이와 같은 의존 관계를 명시적으로 언급해야 한다. 1. 더미 타깃  더미 타깃(더미 필요항목)을 사용하면 독자는 파일 간에 연관된 의존 항목에 관여하지 않으면서 작업을 할 수 있다. make 가 실제 파일의 생성 시간을 확인하는 반면, 더미 타깃과 필요항목에 대해서는 의존 관계에 대한 다소 임의적인 규칙을 사용한다. 더미 타깃(의존항목 행에서 콜론 앞에 표시된 존재하지 않는 파일)

[make] # 4. 명령어
 make 로 실행하는 명령어는 서로 다른 셸에서 실행 되는 것처럼 동작한다. 따라서... 수행되는 작업의 순서가 파일 간의 관계 에만 주로 영향을 받는 경우 make 기술 파일을 사용하여 모든 것을 제어할 수 있으나 변수 조작 을 여러 번 해야 하거나 실행 순서를 변경 해야 하는 경우 (if 문이나 내부 exit 명령어 등) 에는 셸 스크립트를 사용 하는 것이 더 용이하다. 1. 파일 이름의 패턴 매칭(Pattern Matching)  make 에서는 셸에서 사용되는 패턴 매칭 문자(Pattern Matching; *, ?, []) 를 명령행 뿐만 아니라 종속 항목에서도 사용할 수 있다.  그러나 make 에서 여

[make] # 3. 확장자 규칙 (Suffix Rule)
 해당 장에서 소개하는 확장자 규칙(Suffix Rule) 은 Old-fashioned 이다. (The GNU Make Reference Manual Version 4.2, Richard M. Stallman, Roland McGrath, Paul D. Smith 저, 125pg. 참조 (Oepn Book 이라서 Web 에서도 확인 가능))  그럼에도 불구하고 필자(책의 저자가 아닌 이 게시글을 작성하는 본인) 가 obsoleted 된 내용을 굳이 정리해서 올리는 이유는 다음과 같다: >  Suffix Rules are the old-fashioned way of defining implicit rules for make. Suffix rules are obsolete because pattern rules are more general and clearer. They are supported in GNU make for comp

[make] # 2. 매크로
 책에서 등장한 명령 행 이란 단어는 문맥에 맞게 커맨드 라인 혹은 명령 행 이라고 옮겼다. 전부 다 명령 행이라고 하니까 기술 파일의 명령 행인지 프롬프트에서의 커맨드 라인인지 도통 알 수가 없다.  타깃들이 수십 개의 파일들에 종속되거나 여러 개의 서로 다른 버전으로 만들어지기 마련인 실제 프로젝트의 기술 파일에서 반복되는 텍스트의 양을 실로 엄청나리라 생각할 수 있으나 실제 사용되는 기술 파일을 열어보면 뜻밖에도 보통 10~50 줄 정도로 간결하다. 이렇게 간결하게 표현할 수 있는 것은 make 가 지닌 강력한 두 가지 기능, 매크로 와 확장자 규칙 덕분에 가능하다.  위와 같은 매크로를 정의한 기술 파일에 아래와 같은 내용이 들어갔다고 생각해 보자: make plot 을 실행하면 명령은 다음과 같이 실행된다: 1. 구문 규칙 - 기본 규칙  매크로 정의는 등호(=)를 포함하는 하

[make] # 1. 컴파일, 실행, 디버그
책에서는 build 를 작성이라 번역했는데 아무리 봐도 문맥상 너무 그 내용이 맞질 않아서 전부 다 빌드로 번역했다. 작성이라는 단어가 코드를 write 한건지 프로그램을 build 한건지 도통 감이 안 잡힌다. 아마 1990년대 책이라 그런 것일 수도 있겠다. 아직 IT 용어 자체가 정립되지 않은 시기여서 작성이라 번역한 것이라 생각된다 > 단말기라는 용어도 요즈음엔 잘 이해하기 어려울 것 같다는 생각이 들어서 그냥 터미널이라고 번역을 했다.  다음은 program 을 빌드하는 경우에 따라 서로 다른 버전을 생성할 수 있는 명령이다.  위 명령어를 입력하게 되면 해당 파일(program)을 생성하는 데 필요한 모든 컴파일과 링크 작업을 수행할 수 있다. make 유틸리티를 사용하면 수많은 cc 컴파일러 명령들을 일일이 손으로 입력하지 않고도 자동으로 수행할 수 있다. 
[make] # 0. make 란 무엇인가?
1. make 란 무엇인가?  make 는 명령을 생성하는 유틸리티이다. make 유틸리티는 기술 파일(description file)과 몇 가지 일반 템플릿을 사용하여 유닉스 셸에서 실행되는 각종 명령들을 만들어낸다. 이를 통해 임시 파일을 제거하는 데서부터, 복잡한 프로그램 그룹의 최종 실행 파일을 만드는 데 이르기까지 일련의 작업을 수행한다.  프로젝트를 수행하는 과정에서 수차례 반복되는 과정을 make 유틸리티를 통해 간단하게 처리할 수 있다. 전체 파일들 간의 관계를 일단 한 번만 기록해주면 간단한 명령으로 make 유틸리티가 자동으로 갱신 작업을 수행하게 된다. 2. make 유틸리티의 가치 빠른 학습 make 는 특히 기본 규칙을 아주 빠르게 익힐 수 있다. 따라서 이 책을 통해 make 의 기본을 익히고나면 이 책을 읽느라 들인 만큼이나 시간을 절약할 수 있다는 사실을 절감하게 된다. 팀워크