2014-09-20 135 views
0

我有項目和很少的子項目更改包含的生成文件中的文件路徑

某些子項目非常獨立。他們在沒有任何關於整個項目的知識的情況下工作,他們的構建方式不同,並擁有自己的Makefile。這Makefile位於子項目根目錄。整個子項目構建爲單個對象文件。

有沒有什麼辦法可以正確包含這樣的目標文件到主要的Makefile? 「正確」我的意思是保留所有依賴關係,並在子項目Makefile中使用方法構建此文件。

我試圖建立這個目標文件創建規則:

path_to_subproject/some_object.o: 
    $(MAKE) -C path_to_subproject 

但這樣我可以不保存任何依賴關係。

我需要的是將子項目Makefile中的所有相對路徑轉換並將其包含到主要Makefile

另一種方式可以告訴主Makefilesome_object.o使用不同Makefile建,所以make應該用它來檢查的依賴等

+0

你可以修改子項目的makefile嗎? – Beta 2014-09-20 23:02:19

+0

@貝塔是的,我可以 – Ari 2014-09-21 12:55:52

回答

1

假設在subproject/ makefile文件看起來是這樣的:

some_object.o: some_source.cc some_header.h 
    $(CXX) -c $< -o [email protected] -I. 

你可以像這樣修改它:

HERE:=/full/path/to/subproject 

$(HERE)/some_object.o: $(HERE)/some_source.cc $(HERE)/some_header.h 
    $(CXX) -c $< -o [email protected] -I$(HERE) 

這將行事s (除了您不能再make some_object.osubproject/,您必須make /full/path/to/subproject/some_object.o - 這是可以修復的,但您必須作出設計決定或兩個)。

現在你可以添加一行到主生成文件的底部:

include path_to_subproject/Makefile 

,然後主makefile文件可以使用該對象:

some_executable: local_object.o /full/path/to/subproject/some_object.o 
    whatever 

更復雜的變化是可能的,一旦你有這個工作。