2014-08-27 24 views
0

假設我有兩個文件。
文件資料/ A.mk:可以根據目標動態設置Makefile'include'嗎?

NAME=A 
VERSION=1.0 

文件資料/ B.mk:

NAME=A 
VERSION=2.0 

的Makefile文件可能看起來像:

BASE_DIR:=$(shell sh -c 'pwd') 
include $(BASE_DIR)/profile/<**NOT_SURE_WHAT_TO_PUT_HERE**>.mk 

A B: 
    @echo $(VERSION) 

我想我想要的是根據make命令只能「源」或「包含」* .mk文件:

make A 

make B 

因爲我使用的名稱和版本在這兩個* .mk文件,我不能做一個「包括」兩* .mk文件。包含這兩個文件都會生成一個「覆蓋以前的分配」警告。

在一個shell腳本,該NOT_SURE_WHAT_TO_PUT_HERE$ 1。有沒有一個變量/宏/我使用目標名稱來包含基於目標名稱的* .mk? (GNU Make 3.81,Ubuntu 13.04)

+0

沒有理由手動調用shell來運行'pwd。 '$(shell pwd)'會起作用。這就是說這些都是必要的,因爲GNU make至少同時具有'$ PWD'和['$ CURDIR'](http://www.gnu.org/software/make/manual/make.html#index-g_t_0040code_007bCURDIR_007d -389)默認可用。 – 2014-08-27 19:35:51

+0

請注意'$(PWD)'不是由make設置的;它是從父母的環境中繼承的。如果make的調用者沒有設置該變量,那麼它將不可用。你應該使用由make設置的'$(CURDIR)',因此它總是可用的。 – MadScientist 2014-08-27 23:49:21

回答

2

您可以使用變量$(MAKECMDGOALS)

+1

使用'$(word 1,$(MAKECMDGOALS))'或'$(firstword $(MAKECMDGOALS))'來像shell'$ 1'那樣工作。 – 2014-08-27 19:31:04

相關問題