[완료] Makefile 질문입니다~

appleinu의 이미지

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 하면 프로그램이 동작하네요.. 이게 어떤 다른 것을 의미하는건가요?

검색해도 나오질 않기에 도움을 청합니다~
좋은 하루 보내세요~

Hyun의 이미지

Quote:
이부분에 있는 :%:Makefile 은 무엇을 지시하는 건가요? 어떤용법인지 잘 모르겠네요..

19 $(PRO):%:Makefile $(OBJS)
20 $(CC) $(LFLAGS) -o $* $(OBJS)

요 부분은 $(PRO)를 만들 때만 적용되는 규칙입니다. 그러니깐, led프로그램을 만들기 위해 Makefile과 led.o, main.o 오브젝트의 의존성을 가지며, 만들 프로그램은
20 $(CC) $(LFLAGS) -o $* $(OBJS)

를 사용하라는 거죠..

Quote:
DEP 부분에 있는 Makefile 도요 이놈이 어떤걸 의미하는지 모르겠습니다~

요건... Makefile이 수정되었을 때, led프로그램 또한 새로 컴파일 하라는 건데, 보통 include path라던지, 추가된 오브젝트가 있을 때 프로그램을 새로 컴파일 하게 하기 위해 Makefile을 의존성 파일에 추가하기도 합니다.

Quote:
또 KERNEL_PATH 부분에서 /linux-2.6.13-slc2410main
커널 디렉토리 명과 다른데 Make 하면 프로그램이 동작하네요.. 이게 어떤 다른 것을 의미하는건가요?

요건... 질문이 무슨 뜻인지 이해가 잘 안되네요...

appleinu의 이미지

^^ 우선 답변에 진심으로 감사드립니다~
첫번째에서 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 해도 결과값이 나오네요.. 그런 경로는 없는데말입니다.
ㅎ 쓰던 방식이 아니라..의문이 많네요~
다시한번 감사드립니다~^^
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`

꽤나 솔직해 질 수 있다...
우연을 바라지 않는다면....

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`

꽤나 솔직해 질 수 있다...
우연을 바라지 않는다면....

Hyun의 이미지

Quote:
첫번째에서 OBJS에 의존성을 가진다는 것은 알겠는데 Makefile에 의존성을 가진 다는것은 어떤 동작을 하는것인지 감이 잘안옵니다. make $(PRO) 가 되었을시 다시 Makefile을 참조하라는 의미(재귀적의미의) 인가요? 맞다면 Makefile 내에서 실행중인데 다시 할 필요가 있는지 의문이 생깁니다.

make프로그램은 파일의 존재를 보는게 아니라 파일의 수정시간을 봅니다.
그러니깐, 컴파일을 완료한 후 처음 올려주신 Makefile에 의해 다음과 같은 의존성 목록이 생깁니다.


  • led

    • Makefile
    • led.o

      • led.c
      • Makefile
      • *.h

    • main.o

      • main.c
      • Makefile
      • *.h



여기서 Makefile은 Makefile의 수정시간이 led 혹은 led.o, main.o 보다 이후이면 해당파일을 업데이트 해라는 얘기입니다. 단순히 파일의 수정시간만 보는거죠. 사용자가 Makefile에 CFLAGS나 기타 옵션을 바꾸었을 때 다시 컴파일 하게 하기 위해서죠.

Quote:
또 /linux-2.6.13-slc2410main 이 부분에 대해서는
원래 커널 패스가 /kernel-aesop2440-2613-123board/include 거든요 ..
그런데 /linux-2.6.13-slc2410main/include 해도 결과값이 나오네요.. 그런 경로는 없는데말입니다.

흠... 보통 어플리케이션을 컴파일 할 때는 커널헤더를 include path에 추가할 필요가 없습니다. gcc나 크로스컴파일러가 libc나 내부적으로 헤더파일을 갓고 있으므로 그것을 "알아서" include path에 넣어줍니다.

appleinu의 이미지

현우님 설명덕에 좀 명확하게 개념이 잡힙니다~
감사드립니다~^^

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`

꽤나 솔직해 질 수 있다...
우연을 바라지 않는다면....

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`

꽤나 솔직해 질 수 있다...
우연을 바라지 않는다면....

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.