makefile 에서 EXTRA_CFLAGS에 define 추가에 대한 질문.
글쓴이: ryutuna / 작성시간: 화, 2013/06/11 - 8:20오후
일반적으로
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)을 참고해 보긴 했는데
그에 대한 명시는 따로 없는 것 같더군요.
위와 같이는 불가능한지 여쭤보고 싶습니다.
Forums:
잘 됩니다. 아래의 makefile 로 테스트
잘 됩니다.
아래의 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
---------------------------------
제일 왼쪽이 저입니다 :)
all: 밑에 tab 들이 다
all: 밑에 tab 들이 다 날아갔네요..
참고하세요.
---------------------------------
제일 왼쪽이 저입니다 :)
네 답변 감사합니다.
사실 문제는 여기서 발생한 게 아니라 조금 다른 부분에서 발생한 거였는데요,
makefile이 순차적으로 동작하지 않아서 이런 부끄러운 질문을 올렸었네요.
사실 문제는 이런 문제였습니다
"test.c" 의 모듈 소스파일이 있고, 이 안에는
위와 같은 부분이 있습니다.
int a 보다 printk()가 먼저 있기 때문에 아래의 Makefile에서
EXTRA_CFLGAS의 -Werror=declaration-after-statement 옵션 때문에
ISO C90 forbids mixed declarations and code 에러가 날겁니다.
즉, AAA가 정의 되어 있다면, 에러가 나고, 정의 되지 않았다면 에러가 나지 않을겁니다.
Makefile은 아래와 같이 작성했습니다.
와 같이 작성하고 shell 에서 make S3로 컴파일을 했습니다.
그런데 문제는 컴파일이 문제 없이 잘 된다는 겁니다. 즉, -DAAA가 EXTRA_CFLGAG에 추가가 되지 않았다는 건데,
@echo $(EXTRA_CFLAGS) 때문에 나오는 출력에서는
-Wall -Wmissing-prototypes -Wstrict-prototypes -O2 -DGALAXY_S3 -DAAA
와 같이 잘 들어 간 걸로 출력이 되더군요.
-DAAA가 들어갔는데 매크로 AAA는 정의되어 있지 않다고 인식하는...
사실 이 문제를 해결해보려고 하는 과정에서 나온 이야기였습니다.
참고로 make 시에 변수값을 직접 지정하는 식으로, 즉, make PLATFORM=S3 이런 식으로 해결을 하긴 했는데
위와 같은 방법으로는 아직도 해결은 못했습니다.
--------------------------------------------------------------
세상엔 알아야 할 것도 알지 말았어야 할 것도 너무 많았습니다.
...PLATFORM ?= $(filter
댓글 달기