Makefile 인쇄 변수
4631 단어 링크 ux 초보 수기
$(warning 1ST40_IMPORTS is $(ST40_IMPORTS)) 변수 이름,괄호 를 넣 어야 합 니 다.추가 하지 않 으 면 앞에서 변 수 를 출력 할 수 없 는 값 을 발견 할 수 있 습 니 다.
=========================================
http://blog.csdn.net/pendle/article/details/5870872
1.인쇄 정 보 를 출력 하 는 방법 은$(warning xxxx),$(error xxxx)입 니 다.
2.출력 변수 값 의 방법 은:$(warning)입 니 다. $(XXX))
Makefile 에서 경고 나 오류 메 시 지 를 인쇄 하 는 방법:$(warning xxxx)또는$(error xxxx) 출력 변수 방식:$(warning) $(XXX)) 이것 은$(wildcard)와 같 습 니 다.
http://coolshell.cn/articles/3790.html
Makefile 변 수 를 디 버 깅 하 는 방법
2011 년 3 월 1 일
진 호
논평 을 발표 하 다
평론 을 읽다
9,718 명 읽 기
6,7 년 전에'나 와 함께 Makefile 을 써 라'라 는 편 을 썼 는데 지금까지 일부 친구 들 이 나 에 게 Makefile 문 제 를 물 었 다.솔직히 나 는 한동안 Makefile 을 사용 하지 않 았 고 서 툴 렀 다.돌 이 켜 보면 요 몇 년 동안 여러분 들 이 제 문 제 를 문 제 했 습 니 다.사실은 Makefile 의 디 버 깅 문제 가 많 았 습 니 다.그래서 제 가 예전 에 GDB 의 기술 에 관 한 글 에서 한 것 처럼 여기 서 작은 디 버 깅 변수의 기 교 를 소개 합 니 다.너 한테 꼭 도움 이 될 거 라 고 믿 어.
Makefile 의 각종 변수 에 대해 서 는 우리 가 비교적 골 치 아 픈 일 일 수 있 습 니 다.우 리 는 그들 이 결코 편리 하지 않다 는 것 을 확인 하려 면 Makefile 가입 echo 명령 을 수정 해 야 한다.이것 은 때때로 매우 불편 하 다.사실 우 리 는 다음 변 수 를 출력 하 는 Makefile 을 만 들 수 있 습 니 다.
vars.mk
1
2
3
4
5
6
7
8
%:
@
echo
'$*=$($*)'
d-%:
@
echo
'$*=$($*)'
@
echo
' origin = $(origin $*)'
@
echo
' value = $(value $*)'
@
echo
' flavor = $(flavor $*)'
이렇게 되면 make 명령 의-f 매개 변 수 를 사용 하여 Makefile 의 관련 변 수 를 볼 수 있 습 니 다(make 의 내장 변 수 를 포함 합 니 다.예 를 들 어 COMPILE.c 또는 MAKE버 전 같은 거.메모:두 번 째"d-"를 접두사 로 하 는 목 표 는 이 변수 에 대해 더 자세 한 것 을 인쇄 할 수 있 습 니 다.(뒤에 상세 한 설명 이 있 습 니 다)
우리 Makefile 이 이 모양 이 라 고 가정 해 봐(test.mk)
test.mk
1
2
3
4
5
6
7
8
9
10
11
OBJDIR := objdir
OBJS := $(addprefix $(OBJDIR)/,foo.o bar.o baz.o)
foo = $(bar)bar = $(ugh)ugh = Huh?
CFLAGS = $(include_dirs) -O
include_dirs = -Ifoo -Ibar
CFLAGS := $(CFLAGS) -Wall
MYOBJ := a.o b.o c.o
MYSRC := $(MYOBJ:.o=.c)
그러면 우 리 는 이렇게 디 버 깅 을 할 수 있다.
시범 을 보이다
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[hchen@RHELSVR5]$
make
-f
test
.mk -f var.mk OBJS
OBJS=objdir
/foo
.o objdir
/bar
.o objdir
/baz
.o
[hchen@RHELSVR5]$
make
-f
test
.mk -f var.mk d-foo
foo=Huh?
origin =
file
value = $(bar)
flavor = recursive
[hchen@RHELSVR5]$
make
-f
test
.mk -f var.mk d-CFLAGS
CFLAGS=-Ifoo -Ibar -O -O
origin =
file
value = -Ifoo -Ibar -O -O
flavor = simple
[hchen@RHELSVR5]$
make
-f
test
.mk -f var.mk d-COMPILE.c
COMPILE.c=cc -Ifoo -Ibar -O -Wall -c
origin = default
flavor = recursive
value = $(CC) $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -c
우 리 는 볼 수 있다.
make 의 첫 번 째-f 다음은 테스트 할 Makefile 이 고,두 번 째 는 우리 의 debug Makefile 입 니 다
뒤에 변수 이름 을 직접 따 르 고 변수 이름 앞 에'd-'를 추가 하면 더 자세 한 것 을 출력 합 니 다
'd-'접 두 사 를 말 해 보 세 요.그 중에서 다음 세 개의 인 자 를 호출 했 습 니 다.
$(origin):이 변 수 는 어디에서 왔 는 지 알려 줍 니 다.file 은 파일 을 표시 하고 environment 는 환경 변 수 를 표시 합 니 다.그리고 environment override,command line,override,automatic 등 이 있 습 니 다
$(value):이 변수 가 펼 쳐 지지 않 은 모습 을 보 여 줍 니 다.예 를 들 어 상기 예제 중의 foo 변 수 를 들 수 있 습 니 다
$(flavor):두 개의 값 이 있 습 니 다.simple 은 일반적으로 전개 되 는 변 수 를 표시 합 니 다.recursive 는 재 귀적 으로 전개 되 는 변 수 를 표시 합 니 다