2015. 7. 27. 15:04

Makefile 안에서 매크로를 정의할 때에는 매크로이름 = 값 형태를 사용한다

그리고 매크로의 값에는 $(매크로이름) 또는 ${매크로이름} 형태로 접근한다

일부 make 버전들은 $매크로이름 구문도 지원한다

매크로에 빈 값을 배정하는 것도 가능하다

= 다음에 아무것도 쓰지 않으면 된다


매크로는 컴파일러 옵션에 즐겨 쓰인다


응용프로그램을 개발하는 동안에는 최적화를 전혀 사용하지 않으며 디버깅 정보를 실행 파일에 포함시키는 경우가 많다

반면 릴리스 버전에서는 빠른 속도와 작은 실행 파일을 위해 그 반대의 옵션, 즉 최대의 최적화와 디버깅 정보 제거를 필요로 하는 경우가 많다.


컴파일러 명령의 이름 자체도 매크로로 정의하곤 한다.


매크로들은 일반적으로 Makefile 자체에서 정의하나, make 명령 실행 시 정의하는 것도 가능하다. 

make CC=c89 

이처럼 명령줄에서 정의된 매크로들은 Makefile 안에 정의된 같은 이름의 매크로들보다 우선적으로 적용된다.

명령줄에서 매크로를 정의할 때 하나의 정의는 하나의 단일한 명령줄 인수이어야 한다. 따라서 빈칸을 사용하지 말거나, 빈칸이 필요하다면 반드시 따옴포로 감싸야 한다("CC = c89")


* 내장 매크로

$? : 현재 대상보다 더 최근에 수정된 의존물(대상이 의존하는 파일)들의 목록

$@ : 현재 대상의 이름

$< : 현재 의존물의 이름

$* : 현재 의존물의 이름(확장자는 제외)


Makefile 안에서 사용할 수 있는 유용한 특수 문자가 두 가지가 있다

이들은 규칙의 명령 앞에서 쓰인다


- 문자는 make가 오류를 무시하게 만든다. 예를 들어 디렉토리를 생성하되 디렉토리가 이미 존재하기 때문에 생기는 오류 등 모든 오류를 무시하고 싶다면 mkdir 앞에 -를 붙이면 된다.

이 문자를 활용하는 간단한 예가 잠시 후에 나온다


@ 문자는 명령을 수행하기 전에 명령을 표준 출력에 출력하지 않게 한다. echo 명령으로 메시지를 출력하려고 할 때 유용하다