這或者是微不足道的,或者與make應該如何使用的哲學背道而馳,但是我希望有一個命令行讀作「make debug」而不是「make DEBUG = 1" 。我試圖創建一個名爲debug的假目標,除了設置DEBUG變量之外什麼也沒做,但是之後「make debug build」和「make build debug」有區別 - 即在一種情況下,變量在構建之後被設置發生了。使用makefile目標來設置構建選項
有沒有辦法讓某些目標優先?
感謝您的幫助。
這或者是微不足道的,或者與make應該如何使用的哲學背道而馳,但是我希望有一個命令行讀作「make debug」而不是「make DEBUG = 1" 。我試圖創建一個名爲debug的假目標,除了設置DEBUG變量之外什麼也沒做,但是之後「make debug build」和「make build debug」有區別 - 即在一種情況下,變量在構建之後被設置發生了。使用makefile目標來設置構建選項
有沒有辦法讓某些目標優先?
感謝您的幫助。
任何目標,您還可以通過查看去做MAKECMDGOALS可變
ifneq "$(findstring debug, $(MAKECMDGOALS))" ""
DEBUG = 1
endif
build:
@echo build and DEBUG is [$(DEBUG)]
debug:
這是發生了什麼,當你把它叫做:
$ make build
build and DEBUG is []
$ make build debug
build and DEBUG is [1]
make: Nothing to be done for `debug'.
$ make debug build
make: Nothing to be done for `debug'.
build and DEBUG is [1]
如果你的調試只能與構建目標使用,你還不如讓調試呼叫建立,所以你可以只輸入make debug
或make build
,其中make build
將非調試。
但至於你的實際問題,我不熟悉makefile來回答它。
,你可以寫:
.PHONY: debug
debug:
$(MAKE) -$(MAKEFLAGS) build DEBUG=1
build:
echo makeflags='$(MAKEFLAGS)' debug=${DEBUG}
這將至少是GNU工作做,BSD製作和製作的Interix。我沒有嘗試所有其他的實現。
請參閱this page中的「特定於目標的變量值」。
沒有什麼傷害提到你只需要爲target指定'target:DEBUG = 1'而不是指向他的文檔......對吧? – dlamotte 2010-05-06 22:23:05
這不解決「make build debug」不等於「make debug build」的問題嗎?這個特殊的功能正是我所嘗試的。 – leoger 2010-05-07 02:27:20
回想起來,我可以看到這與你的問題相符,但你沒有說清楚。使目標*總是*有序,所以我認爲你是一個不可能完成的任務。 – bmargulies 2010-05-07 10:53:46
一種方法是在構建和調試目標中設置依賴關係和構建規則,但將調試選項添加到調試目標。一個簡單的例子:
的Makefile
program: program.c
gcc -o program program.c
debug: program.c
gcc -D DEBUG -o program program.c
Program.c你可以用gnumake的做
#include <stdio.h>
int main(void) {
#ifdef DEBUG
printf("DEBUG on!\n");
#endif
printf("in the program\n");
return 0;
}
一件事是,擴大與foreach
內置規則使用宏。喜歡的東西:
TARGETS := build all foo bar baz
define DEBUG_TARGET_RULE
$(1).debug:
$$(MAKE) DEBUG=1 $(1)
debug.$(1):
$$(MAKE) DEBUG=1 $(1)
endef
$(foreach target,$(TARGETS),$(eval $(call DEBUG_TARGET_RULE,$(target))))
這將允許您鍵入make debug.foo
或make foo.debug
,它會自動變成make DEBUG=1 foo
,它爲你的作品放在$(TARGETS)
不完全是我正在尋找的,但很酷的解決方法,也演示了一個有用的功能。 – leoger 2010-05-11 20:58:58
可移植性以make文件的遞歸評估爲代價。 – dmckee 2010-05-06 21:58:55