我有大約10個帶有頭文件(.h)的源文件(.c)。 只有兩個源文件(.c)被鏈接到可執行文件(ELF)幷包含主函數。大多數文件被編譯成對象(.o)和(重新)使用(靜態鏈接)與可執行文件。GNU make和對象列表
我試圖定義一個通用的規則建立的所有對象:
%.o : %.c
$(CC) $(CCFLAGS) -c -o [email protected] $<
這編譯到對象源的偉大工程。每次添加新的源文件時,我都不必擔心更新make文件。
但我不知道創建可執行文件規則的最佳方式是什麼?
exec1 : object1.o object2.o object3.o
call the linker
exec2 : object1.o object2.o object4.o object5.o
call the linker
這會工作;但是,每當我添加一個新的頭文件(foo.h)時,我還需要記住更新此規則的對象列表(添加foo.o)。
有什麼辦法可以自動解決給定目標的需要的對象(也許基於包含的頭文件?)?
有沒有更好的方法來定義可執行文件的目標?
請注意我不能使用通配符,因爲不是所有的可執行文件都需要所有的對象。或者可能鏈接器刪除多餘的對象?
謝謝!
您指定的可執行文件的方式很好,通常新的頭對象會修改包含它們的C源文件。 – dvhh
通過生成代碼對象文件的顯式規則,也是默認的GNU Make規則和其他Make變體 – dvhh
對於您的具體問題的簡短回答是否定的,沒有設備可以自動猜測它應該包含的對象可執行文件基於源文件中的頭文件。 – MadScientist