Makefile目标需要依赖其他目标

时间:2016-06-28 13:07:53

标签: c makefile linker

我有三个c文件及其头文件:

  1. 主/程序。{C,H}
  2. LIB / lib1内。{C,H}
  3. LIB / LIB2。{C,H}
  4. program取决于lib1.o,这取决于lib2.oprogram并不直接依赖lib2.o

    program.main()调用lib1.func1(),调用lib2.func2()

    我有两个Makefile个;一个在主文件夹中,另一个在lib中。

    LIB /生成文件:

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

    主要/生成文件:

    VPATH=../lib
    
    all: program
    
    program: program.o lib1.o lib1.h
        $(CC) $(CFLAGS) -o $@ $^
    

    当我运行make -C main all时,出现undefined reference to 'func2'错误。两个lib目标文件都编译得很好。

    我是否需要使lib2成为program的依赖关系,即使它没有直接调用它?

1 个答案:

答案 0 :(得分:1)

是。 lib1.o包含对仅存在于lib2.o中的函数的引用。如果你没有告诉链接器main也链接lib2.o它将永远不会找到它。编译器在编译时不解析从lib1到lib2的引用,它只检查头以确保正确调用它。

你可以让lib目录Makefile构建一个.a(man ar),其中包含两个.o文件,然后链接到你的主构建中的.a文件。