make utility에 대한 질문입니다...

selic의 이미지

장황하게 써야 겠네요..흠..

[main.c]
extern void bar(void);
extern void car(void);

int main(void)
{
bar();
car();
return(0);
}

[bar.c]

#include <stdio.h>
void bar(void)
{
printf("good bye, my love.\n);
}

[car.c]
#include <stdio.h>
void car(void)
{
printf("hello.\n);
}

이렇게 세개의 .c를 만든후..

Makefile를 만들어서

foo: main.o bar.o car.o
gcc -o foo main.o bar.o car.o

main.o: main.c
gcc -c main.c

bar.o: bar.c
gcc -c bar.c

car.o: car.c
gcc -c car.c

이렇게 해서 저장한후...

해당 폴더에서 #make 를 입력하면..-_- 링크가 되어야 하구...
foo가 생겨서 실행해야 하는데..으윽..

#make 하면

makefile2: ***missing separator. 멈춤

이라고 나오는데...제 생각엔 makefile의 2번째줄이 잘못되었어..
인데.. 해답을 모르겠습니다.

ulra의 이미지

foo: main.o bar.o car.o
(TAB)gcc -o foo main.o bar.o car.o

main.o: main.c
(TAB)gcc -c main.c

bar.o: bar.c
(TAB)gcc -c bar.c

car.o: car.c
(TAB)gcc -c car.c

명령줄에 TAB을 띄우지 않으면 안되는걸로 알고 있습니다.

OTL 즐!!!! (좌절 금지!!!)

selic의 이미지

두개의 질문을 했는데...정말 빠르고..정확한..

답변 감사드립니다...

꾸벅...

freezm7의 이미지

ulra wrote:
foo: main.o bar.o car.o
(TAB)gcc -o foo main.o bar.o car.o

main.o: main.c
(TAB)gcc -c main.c

bar.o: bar.c
(TAB)gcc -c bar.c

car.o: car.c
(TAB)gcc -c car.c

명령줄에 TAB을 띄우지 않으면 안되는걸로 알고 있습니다.

아시겠지만,

main.o: main.c 
(TAB)gcc -c main.c 

bar.o: bar.c 
(TAB)gcc -c bar.c 

car.o: car.c 
(TAB)gcc -c car.c 

.c.o :
(TAB)gcc -c $<

또는

%.o : %.c
(TAB)gcc -c $<

로 간단히 할 수 있습니다.

사실... 위 두 문장은 필요하지도 않습니다. Make 내장 룰에 이미 포함되어 있으니까요.

따라서 원래 Makefile 은 그냥 다음 두줄로 끝낼 수 있습니다.

foo: main.o bar.o car.o 
(TAB)gcc -o $@ $^

make 의 내장 룰을 보고 싶으시면

make -p -f - < /dev/null 2> /dev/null

로 확인하시면 되겠습니다.

즐겁게 살아 볼까나~*

ulra의 이미지

freezm7님의 글 중

make -p -f - < /dev/null 2> /dev/null

부분을 해봤는데요.

make: *** No rule to make target `2'. Stop.

이런 메세지가 나오네요.

저두 make는 초보라서 어떻게 해야할지 잘 모르겠습니다.

답변 부탁드립니다.

OTL 즐!!!! (좌절 금지!!!)

feanor의 이미지

ulra님, 사악한 C 쉘을 버리고 본 쉘을 쓰세요. :-)

make와는 별 상관이 없구요, ulra님 쓰시는 쉘이 2>를 인식 못 하는 것 같네요.

--feanor

ulra의 이미지

근데 어떻게 아셨나요? 제가 csh 을 쓰는 것을.... ^^;;

감사드리고요.

csh 이 사악하다고 하셨는데, 시간이 나시면 이유 좀 알려주시면

안될까요? ^^;;;

좋은 하루 되세요.

OTL 즐!!!! (좌절 금지!!!)