[英]Makefile target requires dependency of other target
我有三个c文件及其头文件:
program
取决于lib1.o
,后者取决于lib2.o
program
不直接依赖lib2.o
program.main()
调用lib1.func1()
,后者调用lib2.func2()
。
我有两个Makefile
; 一个在主文件夹中,另一个在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 $@ $^
当我运行make -C main all
,得到了undefined reference to 'func2'
错误的undefined reference to 'func2'
。 两个lib
目标文件都可以正常编译。
我是否需要使lib2
成为program
的依赖项,即使它没有直接调用它?
是。 lib1.o包含对仅存在于lib2.o中的函数的引用。 如果您不告诉main的链接器也链接到lib2.o,它将永远找不到它。 编译器在编译时不会解析从lib1到lib2的引用,它只是检查标头以确保正确调用了它。
您可以在lib目录Makefile中构建一个同时包含两个.o文件的.a(man ar),然后从您的主版本中链接该.a文件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.