한번의 make로 하나의 소스 파일에서 두가지의 실행 파일을 얻는

sangheon의 이미지

-DPLATFORM=FOO 와 -DPLATFORM=BAR 에 의해서 하나의 소스코드에서 두개의 플랫폼에서 각각 동작하는 두개의 실행 파일을 얻고 싶습니다. (소스 코드는 그렇게 컴파일 될 수 있도록 짜여져 있습니다.)

아래에 이와 비슷하게 Release, Debug 디렉토리를 나누는 방법에 대해 질문과 답변이 있는데 적용시켜보려고 하니 .c.o 에 의한 규칙이 잘 적용되질 않더군요.

오브젝트 및 실행 파일을 각각의 디렉토리(Foo와 Bar)로 나누면서 하나의 소스 디렉토리로부터 .c.o 규칙을 적용시켜서 Makefile 을 구성 할 수 있는 방법을 찾고 있습니다.

감사합니다.

익명 사용자의 이미지

cross compiler에 대한 얘기인가요?
아니면, 제목대로 컴파일러 옵션만 바꿔서 컴파일 하고 싶은 건가요?

sangheon의 이미지

크로스 컴파일을 아닙니다.

두개의 실행 파일 모두 하나의 플랫폼에서 동작합니다만 대응하는 클라이언트의 플랫폼이 다르고 - 프로토콜이 다릅니다. - 그에 맞춰서 -D 로 정의하면 각각의 실행파일이 만들어집니다.

현재 매번 하나를 컴파일하고 Makefile 을 수정해서 다시 컴파일하고 해서 두번씩 작업하고 있습니다.

--

Minimalist Programmer

k2hyun의 이미지

makefile.plat1
makefile.plat2

를 만드시고

make -f makefile.plat1
make -f makefile.plat2

를 하시죠.. 8)

공통 부분은 makefile.common 으로 빼시고 플랫폼별로 갈라지는 부분만
따로 작성하셔서
makefile.plat1, plat2 에서 다시금 make -f makefile.common 를 호출하는 방식으로 하시면 될 것 같은데요.

더 이상 없다.

ktd2004의 이미지

저도 예전에 같은 고민을 했었습니다.
제가 내린 결론은 다음과 같습니다.

TARGET := aaa.out bbb.out
SRCS := a.c b.c c.c d.c

OBJS_AAA := $(SRCS:.c=.aaa.o)
OBJS_BBB := $(SRCS:.c=.bbb.o)

all : $(TARGET)

aaa.out : $(OBJS_AAA)
    $(CC) -o $@ $^

bbb.out : $(OBJS_BBB)
    $(CC) -o $@ $^

%.aaa.o : %.c
    $(CC) $(CFLAGS) -DDEFIND_AAA -c -o $@ $<

%.bbb.o : %.c
    $(CC) $(CFLAGS) -DDEFINE_BBB -c -o $@ $<

sangheon의 이미지

대단히 감사합니다.

두 분 답변을 적당히 절충해서 사용하니 아주 깔끔하게 해결됐습니다. :)

새해 복 많이 받으세요.

--

Minimalist Programmer

댓글 달기

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