Makefile 에서 ifeq 이중 조건

kreutz의 이미지

프로그래밍으로 따지자면 이런 느낌일텐데

if (조건 == 0) && (조건 >= 3)
 include file
else
 do not include file

make 파일 내에서 ifeq로 처리해야 하는데 이게 좀 어렵네요. 아니 가능하긴 한가요? -_-;
한마디로 1과 2일 때는 file을 빼둬야 하고 0과 3일 때만 파일을 컴파일 해야 합니다.
3은 앞으로도 늘어날 수 있는 숫자입니다.
띄엄띄엄 0,3 과 1,2 짝이라 < > 부등호로 처리를 할 수가 없어요.

ifeq ("$(다른조건)","다른조건")
$(MOD_NAME)-y += a.o \
ifeq ($(조건),03)
		 b.o \
endif
		 c.o
endif

b가 0과 3일 때만 컴파일 되야 합니다.
...뭔가 제가 무식하게; 접근하고 있다는 느낌이 들어서 고수님들의 조언을 구합니다.

체스맨의 이미지

음... 중첩 조건에 대해서는 정석인진 몰라도 가능은 합니다. 저도 전에 찾어봤었는데요...

gnumake conditional 관련 메뉴얼 부분은 이게 다인듯 싶은데,
http://www.gnu.org/software/make/manual/html_node/Conditionals.html#Conditionals

잘 모르겠더군요. 아무튼 일단 해결책은, 어셈블리어처럼 조건 구문이 잘 발달되지 않은 언어에서 하듯 하면 됩니다... AND 에 대한 예이고, 비슷하게 OR 도 가능하겠죠.

FLAG=1
A=0
B=3
 
ifneq ($(A),0)
FLAG=0
endif
 
ifneq ($(B),3)
FLAG=0
endif
 
ifeq ($(FLAG),1)
include make.mk
endif

그리고 아직 사용처가 없어서 그냥 덮긴 했습니다만, 같다, 다르다 말고, 작다 크다는 어떻게 판별하나요? 지금 3보다 큰 경우를 테스트하시는 것 같은데...

Orion Project : http://orionids.org

kreutz의 이미지

답변 정말 감사합니다.

bash script처럼 생각했습니다. 이경우 부등호가 불가능하죠...

하도 오랜만에 makefile을 만들다보니 너무 헷갈리네요.
아무리 생각해도 너무 심오한 세계... (그래서 멀리했다?)

결국 03이 04로 늘어나면 그때마다 추가해주는 수밖에 없는데
그런 건 좀.... .......하여간 그렇게 하고 싶진 않은데...
(저도 제 심경을 잘 설명을 못하겠네요. 밥 먹고 나왔는데 앞니에 김이 낀 기분이랄까;;;)

마지막으로 한번더, 답변 정말 고맙습니다. 체스맨님. m(_ _)m

kane의 이미지

1, 2인 경우에는 넣지 않고, 다른 경우에는 넣도록 접근하면 되지 않을까요?

ifeq ("$(다른조건)","다른조건")
$(MOD_NAME)-y += a.o \
		 c.o
ifeq ($(조건),12)
else
    $(MOD_NAME)-y += b.o
endif
endif

댓글 달기

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