簡而言之:我想從不同目錄編譯源代碼,並將目標文件放入當前目錄。在makefile中編寫編譯規則時如何去掉源文件的路徑?
例如,我有文件:
test.c
../../lib1/boot.c
../../lib2/startup.c
../common/utils.c
(也幾個文件.S(組裝)和.cpp,但我希望這並不重要)。
他們的所有對象的文件我想在當前目錄:
test.o
boot.o
startup.o
utils.o
我無法弄清楚如何寫在我的makefile這樣的規則。
例如,
%o.: %.c
因爲make
無法找到一個規則來建立從../../lib1/boot.c
boot.o
現在無法正常工作,只能查找規則從../../lib1/boot.c
建立../../lib1/boot.o
。
我試圖用這樣的:
%o.: %.c
(my compilation line, for example "gcc -c $^ -o [email protected]")
%o.: ../../lib1/%.c
(my compilation line)
%o.: ../../lib2/%.c
(my compilation line)
%o.: ../common/%.c
(my compilation line)
和它的作品。但顯然這不夠通用,另外,有些用戶今天來到我這裏說他的應用程序也有一些../../some_other_lib/common_things.c
,因此我的makefile失敗了。我瀏覽了我們的項目,發現很多這樣的案例涉及很多不同的目錄。用我的方法,我必須爲每個這樣的目錄編寫一個單獨的規則,並使用相同的編譯行。這對我來說並不好。
所以我的問題是:如何使一些通用的編譯規則放入(和檢查)目標文件在當前目錄中,同時在不同目錄中操作源代碼?
謝謝。
你有沒有考慮過使用'VPATH'? – Idelic 2013-03-11 19:36:51
Idelic,不幸的是,不,我沒有嘗試過。另請參閱這裏的eriktous的答案。 – AlexL 2013-03-12 18:48:23