make file에 대한 질문....

garam311의 이미지

make file에 대해서 질문 드리려고 하는데요..
make file은 해석을 못하겠네요..
이해 가는 것두 있구 안가는 것두 있구요..

HDRS	      = ext_c.h \
				model.h \
				proto_c.h \
				skeleton.h \
				x_tool.h

OBJS	      = client.o \
				cond.o \
				criteria.o \
				dif_eq.o \
				main.o \
				eom.o \
				m_geo.o \
				higher_n.o \
				lower_n.o \
				motion.o \
				mx3math.o \
				optimize.o \
				output.o \
				r_model.o \
				w_txt.o \
				x_tool.o

PROGRAM       = pedaling.out 

CFLAGS	      = -I/usr/11R6/include -O3 -funroll-loops -DROWSIM
->특히 요놈이 이해가 잘 안가는데요.......^^;

LD	    	  = cc

LDFLAGS	      = -L/usr/X11R6/lib -lX11 -lm
-> 그리구 요놈두요....

LIBS 		  =

$(PROGRAM): $(OBJS) $(LIBS)
	$(LD) $(OBJS) $(LIBS) -o $(PROGRAM) $(LDFLAGS)
->이부분두 역시 이해가 잘안감.. 
->이렇게 따져보니 다 이해가 안가는것 같네요... ㅠ.ㅠ

client.o: $(HDRS)
cond.o: $(HDRS)
criteria.o: $(HDRS)
dif_eq.o: $(HDRS)
main.o: $(HDRS)
eom.o: $(HDRS)
m_geo.o: $(HDRS)
higher_n.o: $(HDRS)
lower_n.o: $(HDRS)
motion.o: $(HDRS)
mx3math.o: $(HDRS)
output.o: $(HDRS)
optimize.o: $(HDRS)
r_model.o: $(HDRS)
w_txt.o: $(HDRS)
x_tool.o: $(HDRS)

CFLAGS와 LDFLAGS의 의미에 대해서 줌 설명해주세요..
감사합니다.

--나두 질문에 답해주구 싶다.... --

서지훈의 이미지

CFLAGS 이놈은 일반적인 컴파일 옵션들을 선언해 주는 부분이 됩니다.
예를 들어
-I 이건 include할 head 파일들의 path를 지정하는 놈이고요...
-O3 이건 optimization을 어느 정도로 할것인지를 설정하는 것입니다.
이건 번호가 높을 수록 optimization이 좋아지긴 하지만...
compile 후 실행에 문제가 있을 수도 있으니 주의를 요합니다.
-funroll-loops
이건 for() 같은 loop문을 unroll(풀어서 써 줌)하여 최적화에 도움을 주는 옵션입니다.

LDFLAGS 이놈은 library에 관한 설정을 선언해 주는 부분입니다.
-L/usr/X11R6/lib 라이브러리가 있는 PATH
-lX11 X11 library를 사용함
-lm math library를 사용함
이런 식으로 사용할 library PATH나 library를 명시적으로 해주는 부분입니다.

뭐... 꼭 이렇게 해야 하는건 아니지만...
일반적으로 이렇게 사용을 하니...
규칙을 지키면서 하면은 편리학게 사용 할수도 있고, 해석도 쉬울것 입니다.

<어떠한 역경에도 굴하지 않는 '하양 지훈'>

#include <com.h> <C2H5OH.h> <woman.h>
do { if (com) hacking(); if (money) drinking(); if (women) loving(); } while (1);

펑키의 이미지

안녕하세요.

이곳 KLDP에 보시면 Makefile 작성법에 대해 나와 있습니다. 이게 늘상 참좀하시는것이 아니라 한번 자신의 프로젝트에 맞게 만들어 놓으시면 두구 두구 사용하실수 있으신거니 한번 날잡아서(1-2시간이면 충분하실겁니다.) 익혀 두시는게 어떠실까요.?

CFLAGS = -I/usr/11R6/include -O3 -funroll-loops -DROWSIM
->특히 요놈이 이해가 잘 안가는데요.......^^;

컴파일 옵션에 대한 설정입니다. 그런데 올려 주신 Makefile이 끝까지 안나와 있는지 CFLAGS 부분이 밑에 없는것 같습니다. 하여간.... 보시면 먼저 -I/usr/11R6/include 는 X11 인클루드 디렉토리 설정입니다. 이와 같이 자신이 인쿨루드한 헤더 파일이 위치한 디렉토리를 설정해주신겁니다.

-O3 그다음은 C 컴파일러의 옵티마이즈 레벨 옵션입니다.
-funroll-loops 이건 제가 모르겠습니다.

man gcc or man cc 참조

-DROWSIM 프로그래상에 사용하시는 메크로 'ROWSIM'를 정의 하신것 같습니다.

LDFLAGS = -L/usr/X11R6/lib -lX11 -lm -> 그리구 요놈두요....
이곳은 라이브러리 정의 이십니다. -L/usr/X11R6/lib <-- 라이브러리가 위치한 디렉토리 정의
-lX11 <--- 사용하는 라이브러리 이름

1. (PROGRAM) $(OBJS) $(LIBS)
2. $(LD) $(OBJS) $(LIBS) -o $(PROGRAM) $(LDFLAGS)

2번 부터 보지요. 이것을 번역하면

cc xx.o 라이브러리들 -o 프로그램이름 등등
을 컴파일 해서 오브젝트 코드를 만들고

1번에서 이것들을 이용해 한개의 실행 파일(pedaling.out)을 만들라..

뭐 이런뜻인것 같습니다. 제 생각에는 먼저 Makefile HOW-TO를 보시는게 더 도움이 되실것 같습니다.

즐거운 하루 되세요.

simpid의 이미지

저같은 초보자도 쉽게 이해한 글입니다.

http://kldp.org/KoreanDoc/html/GNU-Make/GNU-Make.html

garam311의 이미지

요놈들 해석하려구 make책사놓구 보고있는데.. 설명이 좀 어렵더라구요..
마지막 방법으로 여기 올려놨는데 친절한 답변 감사드립니다..
앞으로는 공부열심히 해서 이런 기초적인거 질문 안하도록 하겠습니다..
감사합니다.

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.