Makefile 다중 타겟 (Multiple target) ... 도움을 요청합니다.^^

invalidate의 이미지


안녕하세요.
Makefile 만들다가 고민.. 끝에 내공 부족으로 글을 올림니다.

사용 os: freebsd 6 i386

smva_main.cpp cmva_main.cpp

database.cpp cfgconfig.cpp usage.cpp network.cpp utility.cpp mylog.cpp

이렇게 cpp 파일이 있습니다.

smva_main.cpp 와 cmva_main.cpp는 서로 조금은 다른 일을 하기에 두개의 바이너리 파일이 나왔으면 합니다.

# ----------------++
# PROCESS Name
# ----------------++
PGC_NAME = cmva
PGS_NAME = smva

CSRC = cmva_main.cpp database.cpp cfgconfig.cpp usage.cpp network.cpp utility.cpp mylog.cpp
SSRC = smva_main.cpp database.cpp cfgconfig.cpp usage.cpp network.cpp utility.cpp mylog.cpp
COBJS = cmva_main.o database.o cfgconfig.o usage.o network.o utility.o mylog.o
SOBJS = smva_main.o database.o cfgconfig.o usage.o network.o utility.o mylog.o
all : cmva smva

cmva : $(COBJS)
$(CXX) ${CFLAGS} ${LDFLAGS} ${COBJS} -o ${PGC_NAME} ${LIBS} ${LFLAGS} ${EXTRA_LIB}
strip ${PGC_NAME}
.cpp.o : $(CSRC)
$(CXX) $(CFLAGS) -c -o $@ $< ${INCLUDEDIR} ${DFLAGS} -DPROG_NAME=\"$(PGC_NAME)\"

smva : $(SOBJS)
$(CXX) ${CFLAGS} ${LDFLAGS} ${SOBJS} -o ${PGS_NAME} ${LIBS} ${LFLAGS} ${EXTRA_LIB}
strip ${PGS_NAME}
.cpp.o : $(SSRC)
$(CXX) $(CFLAGS) -c -o $@ $< ${INCLUDEDIR} ${DFLAGS} -DPROG_NAME=\"$(PGS_NAME)\"

오브젝트 만들시에 다른 PROG_NAME이 들어가야합니다.

그런데 make 하면 PROG_NAME에 한개만 들어가게 됩니다.< 파일 smva,cmva는 나오지만.. >
제가 원하는건 각각의 cmva, smva가 들어가는것인데요..
아마도 .opp.o 에서 이미 존재 하는 오브젝트 파일 때문인것 같은데..

다른 PROG_NAME이 들어가기에 조금 골치 입니다.

조언 부탁드립니다^^

ktd2004의 이미지

원하시는 방법은 조금 돌아가셔야 할 것 같습니다.

* 두개의 target을 만들기 위해서는 두가지 타입/이름의 object 파일을 지정하셔야 합니다.
* 첫번째 target이 만들어진 시점에서 이미 object 파일이 생성되었기 때문에 새롭게 오브젝트 파일을 빌드하지 않게 됩니다.

* 이런식으로 하시면 될 것 같습니다.(물론 실험해 보지는 않았습니다.)

# ----------------++
# PROCESS Name
# ----------------++
PGC_NAME = cmva
PGS_NAME = smva
 
CSRC = cmva_main.cpp database.cpp cfgconfig.cpp usage.cpp network.cpp utility.cpp mylog.cpp
SSRC = smva_main.cpp database.cpp cfgconfig.cpp usage.cpp network.cpp utility.cpp mylog.cpp
 
COBJS = $(CSRC:.c=.cmva.o)
SOBJS = $(SSRC:.c=.smva.o)
 
 
all : cmva smva
 
cmva : $(COBJS)
	$(CXX) ${CFLAGS} ${LDFLAGS} ${COBJS} -o ${PGC_NAME} ${LIBS} ${LFLAGS} ${EXTRA_LIB}
	strip ${PGC_NAME}
%.cmva.o : $(CSRC)
	$(CXX) $(CFLAGS) -c -o $@ $< ${INCLUDEDIR} ${DFLAGS} -DPROG_NAME=\"$(PGC_NAME)\"
 
smva : $(SOBJS)
	$(CXX) ${CFLAGS} ${LDFLAGS} ${SOBJS} -o ${PGS_NAME} ${LIBS} ${LFLAGS} ${EXTRA_LIB}
	strip ${PGS_NAME}
%.smva.o : $(SSRC)
	$(CXX) $(CFLAGS) -c -o $@ $< ${INCLUDEDIR} ${DFLAGS} -DPROG_NAME=\"$(PGS_NAME)\"
 

invalidate의 이미지

우선 관심과 답글 감사합니다.

실행해본 결과..ㅡㅡ;; .
cpp파일이 모두 지워졌구요.ㅋㅋ clean 옵션에서..ㅡㅡ; COBJS 변수를 사용하니까.ㅎ
뭐..백업은 항시 되어 있으니.순간 당혹감..ㅎㅎ

우선 make 해본결과.. .h 파일을 찾을수 없다고 나오네요..

아..ㅡ_-;어찌 해야해야 할까요.. help me~~

검은 모니터 안에서
나만의 세상을 창조하라.

ktd2004의 이미지

정확하게 어떤 상황인지 이해가 가지 않네요..

* 위에 올리신 Makefile에는 clean이 없는데요...
* 그리고 .h 파일이 없다는 얘기는 Makefile의 얘기가 아니라 컴파일러의 에러같습니다.

댓글 달기

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