2012-02-02 102 views
3

爲了簡化我的問題,如果我有一個Makefile如下傳遞一個命令行參數爲目標的Makefile

%: %.c 
      gcc -o [email protected] $< 

    make foo 

Make foo將從foo.c生成可執行foo。沒有問題。如果我要改變如下生成文件,這樣我可以從生成文件的命令行

# To make things little complex 
    TARG=$(EXE) 
    $(TARG): %.c 
      gcc -o [email protected] $< 

    make EXE=foo 

上述命令make EXE=foo傳遞目標說:

"make: *** No rule to make target %.c, needed by富」。 Stop.`

爲什麼$(TARG)在Makefile中target規則得到擴大呢?

回答

1

剛剛從你的第一例保留代碼,並添加下面一行:

.DEFAULT_GOAL := $(EXE) 

或(這實際上是相同的)添加$(EXE) :規則沒有任何其他規則之前的配方。默認情況下,如果在命令行中未指定任何內容,則將選取作爲Makefile中定義的第一個目標。