2010-10-02 48 views
0

我使用中如果我通過選項在命令行中像如何使gnumake的行爲與在命令行中的默認選項通過一樣?

make OPT1=opt1 OPT1=2 

我得到一個不同的行爲的makefile比我修改Makefile文件,寫有

OPT1=opt1 
OPT2=opt2 

,然後再運行

make 

在命令行上。

我想要的行爲是我在命令行中使用選項的行爲。現在我正在使用別名,但我很想知道這是否可以純粹使用Makefile來完成。

謝謝。

+1

你會得到不同的行爲?它有什麼不同?你可以給我們一個makefile(最簡單的一個顯示不同)嗎? – Beta 2010-10-02 05:31:42

+0

我不認爲我可以。 makefile是相當複雜的... – skeept 2010-10-03 15:30:57

+0

這可能是你的問題的一部分。這是偶然的遺留的makefile,它包含和/或重寫其他makefile? – Beta 2010-10-03 16:22:43

回答

1

我最終解決,這是該方法如下:

mv Makefile Makefile.aux 

然後創建一個現在的Makefile與內容

OPT1=true 
OPT2=false 

DEFAULT_OPTS=--no-print-directory OPT1=$(OPT1) OPT2=$(OPT2) 

.PHONY : $(MAKECMDGOALS) 
$(MAKECMDGOALS): 
     $(MAKE) -f Makefile.aux $(DEFAULT_OPTS) $(MAKEFLAGS) $(MAKECMDGOALS) 

.PHONY: all 
all: 
     $(MAKE) -f Makefile.aux $(DEFAULT_OPTS) $(MAKEFLAGS) $(MAKECMDGOALS) 

我用--no-打印目錄是因爲原因如果我沒有這個選項使用這個方法,它會在開始和編譯結束時打印額外的消息。

1

您的make文件是否對這些變量使用origin命令來決定是否覆蓋它們?這返回變量的原點,例如, 「環境」或「命令行」,也許makefile是寫在這些情況下做不同的事情。