1. 소스 파일(*.c등)을 컴파일 하면 동일한 이름을 가지는 오프젝트 파일을 만든다.
2. 컴파일러의 종류에 의해 오브젝트 파일의 경우는 각 모듈(함수)의 이름을 그대로 사용하는 경우와 '_'을 추가하는 경우가 생긴다. ( ex> intake -> _intake 등...)
3. 라이브러리 >> 파일 >> 모듈
4. 라이브러리 내에 파일이 여러개가 묶여 있을경우 원하는 부분만 사용할 경우는 사용하는 "라이브러리 이름 (파일이름)" 매크로의 경우 "{LIB}(파일이름)"의 형태로 된다. 예를 들면 'ar r libtemp one.o two.o'로 만들어진 libtemp라는 라이브러리에서 two.o만 사용할 경우는 "libtemp(two.o)"라고 써서 사용한다. (시스템V의 경우는 하나의 이름만 사용할 수 있다.)
5. 일부 make 버젼에서는 파일에 관계없이 특정 모듈(함수)를 참조할 수도 있다. ex> libtemp((_calc))
6. C소스 파일이 변경되었을때 라이브러리를 갱신하려면 다음과 같이 한다. 이 예제는 소스가 변경되었을때 라이브러리를 갱신하는 예제이다.
.c.a:
$(CC) -c $(CFLAGS) $<
ar rv $@ $*.o
rm -rf $*.o
7. 라이브러리 관리를 위해서 간단한 기술 파일 항목을 이용하여 라이브러리를 관리할 수 있다. 갱신이 될때 알려준다.
libtemp: libtemp(one.o) libtemp(two.o)
echo "$@ is now up-to-date"
8. "libtemp(one.o) : /usr/include/stdio.h" 이 경우는 libtemp는 /usr/include/stdio.h가 one.o가 라이브러리에 통합된 마지막 시점 이후에 변경되면 갱신된다.
9. 이중콜론의 경우는 기본적으로 makefile내에서 동일한 타겟에 대해서 두번 정의하는 것을 허용하지 않는 다는 것을 피하기 위해서, 동일한 타겟에 대해서 다시 정의할 수 있다. make는 두 항목을 확인후 필요항목에 대한 명령을 실행하게 된다.
10. NULL확장자는 일부 make에서 하나의 확장자만을 사용하여 정의 가능하다. 초반 기술 파일에서 ".c: ~~~" 처럼 만든다면 기본 규칙( "$(CC) $(CFLAGS) $(LDFLAGS) $< -o $@" )로 실행하게 되는 것을 말한다. 만약 "make program"이라 했다면 "cc -O program.c -o program"으로 실행이 된다.
11. -p옵션의 경우 모든 옵션 및 매크로, 확장자 규칙, 타겟을 출력하는 옵션이다. 사용자가 가지고 있는 기술 파일의 영향을 받지 않은 것들을 보려면 "-f"옵션을 더 붙이도록 한다. ( make -fp, GNU make의 경우는 make -p -f)
|