2016-06-28 34 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