카테고리 없음

2. Make가 소스 목록을 관리한다?

개발자_이훈규 2014. 4. 10. 15:37

http://developinghappiness.com/?p=174 이 블로그를 보고 정리한 글입니다.




1. Make의 구성은? 에 이어서 Make이 의존성을 스스로 판단해서 Makefile을 수정해 주는 과정을 살펴보겠습니다.


편집 소스는 이전에 올렸던 파일(makefile, test.c)을 가지고 시작하겠습니다.




gccmakedep 라는 명령어는 파일의 상관관계를 파악한 후 Makefile을 자동으로 작성해준다고 되어 있었습니다.


그럼 제가 한번 해보겠습니다.


우선 test.c에 test.h, tset1.c에 test1.h를 연결하고 test.c에서 test1.h를 불러보겠습니다.



그럼 총 4개의 파일, 그리고 1개의 Makefile이 준비가 되었습니다.

makefile  test.c  test.h  test1.c  test1.h )


makefile.tar.gz


이 상태에서 

$gccmakedep test.c test1.c

를 눌러보겠습니다.



아... 설치...ㅋ
sudo apt-get install xutils-dev
그럼 다시 해보겠습니다.


$gccmakedep test.c test1.c

아무런 변화는 없지만 이상없이 끝난것 같습니다.

그러면 Makefile을 살펴보겠습니다.



아래와 같이 # DO NOT DELETE 이하가 생성되었습니다.



그리고 make를 해보니...


echo "test.o is here"

test.o is here



음.... 음.... 뭐지?? 왜 test.o is here이 2번 생겼지?
echo가 그대로 나온것 자체도 약간 이상하지만 이건 명령문으로 나온게 아니라 단순히 실행된것 같은데요,
왜, make하면 gcc -o output -c ~~~ 이런식으로 많이 나오잖아요, 그냥 레시피를 출력한것 입니다.
이유는 echo가 나왔기 때문에, 심지어 먼저.


자, 그럼 이제 이러한 관계를 depend규칙으로 이용해서 자동으로 생성되게 만들어 보겠습니다.
블로그씨는 make depend라는 커맨드를 입력하면 수행되게 만들었군요.
한번 해보죠 ㅎㅎ


depend:

    gccmakedep $(SRCS)

를 추가했습니다.


그리고 파일을 하나 더 만들어보죠, test2.{h,c}로 test1.c에 연결해보겠습니다.


makefile.tar.gz



그리고 

make depend

를 해보겠습니다.



test2에 대한 내용이 없습니다.. deep이 1단계까지만 들어가나 보네요,

그럼 SRCS와 OBJS에 test1을 추가하겠습니다.

근데 일일이 추가하는것도 귀찮네요, 해당 블로그에 c와 o를 한줄에 작성하는 방법이 나와있었습니다. 그걸로 해볼게요




위와 같이 코드를 바꿨습니다. 자, 과연 make depend를 하면 DO NOT DELETE 부분에 test2의 배용이 추가될까요???


$make depend

$vim makefile




반영이 되었습니다!!


이상으로 gccmakedef써보기를 마칩니다^^