2016-06-28 33 views
0

的依賴性我有三個C文件和它們的頭文件:。生成文件目標需要其他目標

  1. 主/程序{C,H}
  2. LIB/LIB1 {C,H}
  3. LIB/LIB2。{C,H}

program取決於lib1.o,這取決於lib2.oprogram不直接依賴於lib2.o。請致電lib2.func2()

我有兩個Makefile s;一個在主文件夾中,另一個在lib中。

的lib/Makefile文件:

all: lib1.o lib2.o 

lib1.o: lib2.o lib2.h lib1.h 

lib2.o: lib2.h 

主/ Makefile文件:

VPATH=../lib 

all: program 

program: program.o lib1.o lib1.h 
    $(CC) $(CFLAGS) -o [email protected] $^ 

當我運行make -C main all,我得到一個undefined reference to 'func2'錯誤。 lib目標文件都編譯好。

即使不直接調用它,我是否需要使lib2依賴於program

+0

目標文件是獨立的翻譯單元,您需要列出'program'目標所需的所有目標文件。 –

+0

所以我需要包含lib2.o作爲程序的依賴關係? – retrodev

+0

食譜在哪裏?這些makefile只是片段還是完整? – 2501

回答

1

是的。 lib1.o包含對僅存在於lib2.o中的函數的引用。如果你不告訴主鏈接器也鏈接到lib2.o它永遠不會找到它。編譯器不會在編譯時解析從lib1到lib2的引用,它只是檢查頭以確保正確調用它。

你可以讓lib目錄下的Makefile構建一個包含兩個.o文件的.a(man ar),然後鏈接到主構建的.a文件。

+0

我明白了。那麼我是否真的需要將lib2.o列爲lib1.o的依賴項? – retrodev

+0

是的。你做。或者構建一個包含兩個.o文件的lib.a文件。 – tad