Makefile 작성 도와주세요.
글쓴이: thisrule / 작성시간: 월, 2005/10/17 - 4:55오후
현재 디렉토리 하위에 aaa, bbb라는 두개의 서브 디렉토리가 있고,
aaa아래에 여러 C source파일이 있고, bbb아래에도 그렇습니다.
현재 디렉토리에서
Quote:
하면 aaa디렉토리에 있는 C program들이 compile되고, make aaa
Quote:
하면 bbb디렉토리에 있는 C program들이 compile되게 하려 합니다.
make bbb
그래서 예로 각 디렉토리에 main.c 만 있다고 생각하고 아래와 같이 작성하였습니다.
aaa: TDIR=aaa aaa: VPATH=aaa aaa: main.o gcc -o main main.o bbb: TDIR=bbb bbb: VPATH=bbb bbb: main.o gcc -o main main.o %.o: %.c gcc -o $@ -c $< clean: -rm aaa/*.o bbb/*.o
그런데 잘 동작하지 않습니다.
지적해 주세요.
Forums:
[url]http://doc.kldp.org/KoreanDoc/html/
http://doc.kldp.org/KoreanDoc/html/GNU-Make/GNU-Make.html
도움이 되실겁니다.
[quote="쿨링팬"][url]http://doc.kldp.org/Ko
말씀하신 곳에선 제가 원하는답을 찾을 수 없었습니다.
쿨링팬님께선 위 사이트에서 답을 찾거나 힌트가 있어서 제게 추천해주신건가요?
[code:1]make: *** No rule to make ta
메시지의 원인만을 말씀드리자면, Makefile 규칙에서 명기된 파일들의 경로가 올바르지 않기 때문입니다.
로 하면 됩니다.
$PWD `date`
[quote]말씀하신 곳에선 제가 원하는답을 찾을 수 없었습니다.쿨링
그럼요.
Makefile 하나에다가 다 넣으려고 하면, 어떤 경우에는 힘이 듭니다.
각 서브 디렉토리에 Makefile을 넣고, 최상위 디렉토리에서 서브 디렉토리로 들어가서 Makefile을 수행하고, 끝나면 다시 나오고 하는 방법이 수월할 때도 있습니다.
[quote="wariua"][code:1]make: *** No
각 rule에서 디렉토리명을 적지 않으려고 VPATH를 설정했습니다.
Make manual에 보면 VPATH에 설정된 디렉토리 아래의 모든 파일에 대하여
rule이 적용된다 하기에 사용하였는데 어떨땐 되고 어떨땐 안되기에 질문드렸습니다.
아래는 make manual에서 발췌한 내용입니다.
[code:1]aaa: TDIR=aaaaaa: VPAT
위 코드에서 'aaa', 'bbb'라는 target이 세 번 쓰였습니다.
이런 경우 앞의 두 개는 무시됩니다.
그러면,
이를 수행하게 되는데, dependency가 main.o 입니다.
여기를 찾아가지만, 앞서 무시된 구문에 VPATH가 있기 때문에 파일을 찾을 수 없어서 수행이 되지 않는 것입니다.
VPATH의 문제가 아니라, Makefile의 target, dependency, command의 잘못된 사용으로 인한 결과입니다.
여러 개의 sub-directory에 들어있는 file들을 효과적으로 compile할 수 있는 방법이 recursive make방법이며, 이는 앞서 제가 언급한 문서에 자세히 설명되어 있습니다.
도움이 되셨길 바랍니다.
결국 aaa target에 대한 dependency 확인이 수행되기 '전
결국 aaa target에 대한 dependency 확인이 수행되기 '전에' VPATH를 "aaa"로 설정해 줄 수 있는 적당한 방법이 없어서 그런 것 같은데요... 디렉터리 별로 Makefile을 만드는 것이 정히 싫으시면
식으로도 가능하겠습니다. aaa의 dependency에 objclean을 추가한 건, main.o가 aaa/main.c에서 만들어진 것인지 bbb/main.c에서 만들어진 것인지 확인할 방법이 없으므로 무조건 지우고 새로 만들게 하기 위한 것입니다.
좀 아름답지 못하다는 느낌이기는 합니다만, 잠깐 쓰는 소스에서 사용을 좀 편하게 하기 위한 거라면, 까이꺼, 제대로 동작만 하면 되지요~ :wink: (하지만 이 정도가 돼버리면 차라리 각 target별로 디렉터리를 지정해 주는 게 타이핑 양이 더 적을 것 같은... 쿨룩;; )
$PWD `date`
댓글 달기