makefile 에서 EXTRA_CFLAGS에 define 추가에 대한 질문.

ryutuna의 이미지

일반적으로

EXTRA_CFLAGS +=-DDEBUG_MSG

와 같은 형태로 define만을 추가하거나

EXTRA_CFLAGS +=-DDEBUG_MSG=$(DEBUG_1)

과 같이 define의 값을 대입해서 쓰는 것은 알고 있는데,

EXTRA_CFLAGS+=-D$(GALAXY_S3)

와 같이 -D 뒤에 변수로 바로 넣어는 불가능 한가요?

우선 GNU 메뉴얼(http://www.gnu.org/software/make/manual/make.html#Overriding)을 참고해 보긴 했는데

그에 대한 명시는 따로 없는 것 같더군요.

위와 같이는 불가능한지 여쭤보고 싶습니다.

pchero의 이미지

잘 됩니다.

아래의 makefile 로 테스트 했습니다.

EXTRA_CFLAGS = -DDEBUG_MSG
EXTRA_CFLAGS += -DDEBUG_ADD
EXTRA_CFLAGS += -D$(PATH)
all :
@echo "Test1"
@echo "Test2"
@echo $(EXTRA_CFLAGS)

jonathan@MyWork:~/workspace/19.Projects/TestMakefile$ make all
Test1
Test2
-DDEBUG_MSG -DDEBUG_ADD -D/opt/oracle/product/11.2.0/dbhome_1/bin:/usr/sbin:.:/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/local/freetds/bin

jonathan@MyWork:~/workspace/19.Projects/TestMakefile$ make --version
GNU Make 3.81
Copyright (C) 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.

This program built for i686-pc-linux-gnu

---------------------------------
제일 왼쪽이 저입니다 :)

pchero의 이미지

all: 밑에 tab 들이 다 날아갔네요..
참고하세요.

---------------------------------
제일 왼쪽이 저입니다 :)

ryutuna의 이미지

사실 문제는 여기서 발생한 게 아니라 조금 다른 부분에서 발생한 거였는데요,

makefile이 순차적으로 동작하지 않아서 이런 부끄러운 질문을 올렸었네요.

사실 문제는 이런 문제였습니다

"test.c" 의 모듈 소스파일이 있고, 이 안에는

#define AAA
  printk("aa");
  int a;
#endif

위와 같은 부분이 있습니다.

int a 보다 printk()가 먼저 있기 때문에 아래의 Makefile에서

EXTRA_CFLGAS의 -Werror=declaration-after-statement 옵션 때문에

ISO C90 forbids mixed declarations and code 에러가 날겁니다.

즉, AAA가 정의 되어 있다면, 에러가 나고, 정의 되지 않았다면 에러가 나지 않을겁니다.

Makefile은 아래와 같이 작성했습니다.

ARCH            = arm 
TOOLCHAIN       = /opt/arm-eabi/bin/arm-eabi-
KERNEL_S3        = /home/ryutuna/kernel_S3_JB
 
S3_DEFINE   = S3
S4_DEFINE   = S4
 
EXTRA_CFLAGS    += -Wall -Wmissing-prototypes -Wstrict-prototypes -O2
 
PLATFORMS = $(S3_DEFINE) $(S4_DEFINE) 
PLATFORM = $(filter $(PLATFORMS), $(MAKECMDGOALS))
 
ifeq ($(PLATFORM), $(S3_DEFINE))
KERNEL      = $(KERNEL_S3)
EYENES_PATH:= /home/ryutuna/mnt/windows_d/pnp/
EXTRA_CFLAGS+=-DAAA
endif
 
 
 
 
...other rules here....
 
S3 S4:
    @echo $(KERNEL)
    @echo $(EXTRA_CFLAGS)
    @echo "Build....$(PLATFORM)"
    @make ARCH=$(ARCH) CROSS_COMPILE=$(TOOLCHAIN) -C $(KERNEL) M=$(PWD) modules
    @echo
    @sudo cp ./$(TARGET).ko $(EYENES_PATH)

와 같이 작성하고 shell 에서 make S3로 컴파일을 했습니다.

그런데 문제는 컴파일이 문제 없이 잘 된다는 겁니다. 즉, -DAAA가 EXTRA_CFLGAG에 추가가 되지 않았다는 건데,

@echo $(EXTRA_CFLAGS) 때문에 나오는 출력에서는

-Wall -Wmissing-prototypes -Wstrict-prototypes -O2 -DGALAXY_S3 -DAAA

와 같이 잘 들어 간 걸로 출력이 되더군요.

-DAAA가 들어갔는데 매크로 AAA는 정의되어 있지 않다고 인식하는...

사실 이 문제를 해결해보려고 하는 과정에서 나온 이야기였습니다.

참고로 make 시에 변수값을 직접 지정하는 식으로, 즉, make PLATFORM=S3 이런 식으로 해결을 하긴 했는데

위와 같은 방법으로는 아직도 해결은 못했습니다.

--------------------------------------------------------------
세상엔 알아야 할 것도 알지 말았어야 할 것도 너무 많았습니다.

bushi의 이미지

...
PLATFORM ?= $(filter $(PLATFORMS), $(MAKECMDGOALS))
...
 
S3 S4:
      ...
      @make ARCH=$(ARCH) CROSS_COMPILE=$(TOOLCHAIN) -C $(KERNEL) M=$(PWD) PLATFORM=$@ modules
 
      ...

댓글 달기

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