[완료] Makefile 질문입니다~
CROSS = /korea-dokdo/aesoptool/gcc-3.3.4-glibc-2.3.3/arm-linux/bin/arm-linux-
2 KERNEL_PATH = /korea-dokdo/linux-2.6.13-slc2410main
3
4 DEP = Makefile $(wildcard *.h)
5
6 CC = $(CROSS)gcc
7 LDFLAGS = -s
8
9 CFLAGS = -g -Wall -l. -l$(KERNEL_PATH)/include
10 OBJS = led.o main.o
11
12 PRO = led
13
14 #.SUFFIXES : .c .o
15 #.c.o :
16 # $(CC) -c $(CFLAGS) -l. -o $@ $<
17
18 all : $(PRO)
19 $(PRO):%:Makefile $(OBJS)
20 $(CC) $(LFLAGS) -o $* $(OBJS)
21
22
23 $(OBJS):%.o:%.c $(DEP)
24
25
26
27 clean :
28 rm -rf *.*~ *~ *.o .*.*.swp .*.swp $(PRO)
-------------------------------------------------------------------------------------
이 메이크 파일에서요
$(PRO):%:Makefile $(OBJS)
$(CC) $(LFLAGS) -o $* $(OBJS)
이부분에 있는 :%:Makefile 은 무엇을 지시하는 건가요? 어떤용법인지 잘 모르겠네요..
DEP 부분에 있는 Makefile 도요 이놈이 어떤걸 의미하는지 모르겠습니다~
또 KERNEL_PATH 부분에서 /linux-2.6.13-slc2410main
커널 디렉토리 명과 다른데 Make 하면 프로그램이 동작하네요.. 이게 어떤 다른 것을 의미하는건가요?
검색해도 나오질 않기에 도움을 청합니다~
좋은 하루 보내세요~
인용:이부분에 있는
요 부분은 $(PRO)를 만들 때만 적용되는 규칙입니다. 그러니깐, led프로그램을 만들기 위해 Makefile과 led.o, main.o 오브젝트의 의존성을 가지며, 만들 프로그램은
를 사용하라는 거죠..
요건... Makefile이 수정되었을 때, led프로그램 또한 새로 컴파일 하라는 건데, 보통 include path라던지, 추가된 오브젝트가 있을 때 프로그램을 새로 컴파일 하게 하기 위해 Makefile을 의존성 파일에 추가하기도 합니다.
요건... 질문이 무슨 뜻인지 이해가 잘 안되네요...
아~그렇군요~
^^ 우선 답변에 진심으로 감사드립니다~
첫번째에서 OBJS에 의존성을 가진다는 것은 알겠는데 Makefile에 의존성을 가진 다는것은 어떤 동작을 하는것인지 감이 잘안옵니다. make $(PRO) 가 되었을시 다시 Makefile을 참조하라는 의미(재귀적의미의) 인가요? 맞다면 Makefile 내에서 실행중인데 다시 할 필요가 있는지 의문이 생깁니다.
$(PRO):%:Makefile $(OBJS)
$(CC) $(LFLAGS) -o $* $(OBJS)
이부분에서
$(PRO): $(OBJS)
$(CC) $(LFLAGS) -o $* $(OBJS)
같이 Makefile 부분을 빼버리면 다른 .c파일(led.c같은) 가 컴파일이 되질 않습니다.
개개의 .c파일을 컴파일 해주는 부분이
$(OBJS):%.o:%c $(DEP)
부분인데 이곳에 어떤 영향을 주는건가요?
또 /linux-2.6.13-slc2410main 이 부분에 대해서는
원래 커널 패스가 /kernel-aesop2440-2613-123board/include 거든요 ..
그런데 /linux-2.6.13-slc2410main/include 해도 결과값이 나오네요.. 그런 경로는 없는데말입니다.
ㅎ 쓰던 방식이 아니라..의문이 많네요~
다시한번 감사드립니다~^^
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`
꽤나 솔직해 질 수 있다...
우연을 바라지 않는다면....
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`
꽤나 솔직해 질 수 있다...
우연을 바라지 않는다면....
인용:첫번째에서
make프로그램은 파일의 존재를 보는게 아니라 파일의 수정시간을 봅니다.
그러니깐, 컴파일을 완료한 후 처음 올려주신 Makefile에 의해 다음과 같은 의존성 목록이 생깁니다.
여기서 Makefile은 Makefile의 수정시간이 led 혹은 led.o, main.o 보다 이후이면 해당파일을 업데이트 해라는 얘기입니다. 단순히 파일의 수정시간만 보는거죠. 사용자가 Makefile에 CFLAGS나 기타 옵션을 바꾸었을 때 다시 컴파일 하게 하기 위해서죠.
흠... 보통 어플리케이션을 컴파일 할 때는 커널헤더를 include path에 추가할 필요가 없습니다. gcc나 크로스컴파일러가 libc나 내부적으로 헤더파일을 갓고 있으므로 그것을 "알아서" include path에 넣어줍니다.
잘알았습니다~
현우님 설명덕에 좀 명확하게 개념이 잡힙니다~
감사드립니다~^^
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`
꽤나 솔직해 질 수 있다...
우연을 바라지 않는다면....
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`
꽤나 솔직해 질 수 있다...
우연을 바라지 않는다면....
댓글 달기