2016-06-15 50 views
0

調用生成文件我有一個源代碼文件夾結構如下在一個子目錄

src 
|-tests 
|-abc 

我在src生成文件,其具有稱爲tests目標。 tests有它自己的makefile它用來將源代碼編譯成二進制(多個目標)。所有這些都由測試目錄中的Makefile管理。

我的src make文件具有以下目標。

all: main tests 

main: $(DEPENDENCY IN SRC and ABC) 
    command 

tests: ?? 
    make -C tests 

我可以在主Makefile中指定的測試目標是什麼扶養..我不希望這個Makefile要注意在測試文件夾中的源文件。

回答

0
all: main tests 

main: $(DEPENDENCY IN SRC and ABC) 
    command 

tests: 
    $(MAKE) -C tests 

這將無條件地調用其私有子目錄上的測試make。請注意,使用特殊的$(MAKE)變量有助於傳播命令行參數並降低開銷。

0

只聲明目標爲PHONY這意味着make不會檢查任何生成的文件。相反,它只是總是執行規則,讓第二個電話make來決定需要建立什麼。

想一想:如果你有一個附屬文件src/tests會發生什麼? make會注意到該文件已經存在,並且沒有指明任何先決條件,它將決定不創建該文件。防止執行規則tests

all: main tests 

main: $(DEPENDENCY IN SRC and ABC) 
    # Recipes (That is the word to describe commands in a make rule) 

.PHONY: tests 

tests: 
    $(MAKE) -C tests 

此外,添加由亞歷克斯的答案:使用$(MAKE)是一個很好的做法。並允許您的makefile獨立於make程序的名稱。想象一下,你有一個分佈在程序名爲xyz-make的地方。

0

我不希望這個Makefile知道測試文件夾中的源文件。

也許,但你可能想重新考慮。彼得米勒的Recursive Make Considered Harmful使一個強大的情況下,一個Makefile是你需要或想要的。很久以前它改變了我的想法。