首页 > 解决方案 > 带有静态和共享库的 Makefile

问题描述

我从创建 Makefile 开始。我编写了简单的 Makefile,它创建了两个库,静态和动态并用于编译可执行文件。程序运行的文件位于单独的文件夹中:src 中的 *.c,include 中的 *.h,lib 中的 *.a 和 *.so 以及 bin 中的可执行文件。其余的都在 makefile 文件夹中。我的 Makefile 创建所有文件但找不到文件。我在 gcc 中使用 VPATH 和 -L。但那是行不通的。我正在开发 Ubuntu 20.04 LTS。感谢所有帮助。

vpath %.c src

vpath %.h include

vpath %.a lib

vpath %.so lib

%.o: %.c
    gcc -c $<

%: %.o
    gcc -o ./bin/$@ $^  -L./lib -I./bin

libj%.a: %j.o
    ar rs ./lib/$@ $^ 

lib%r.so: p%.o
    gcc -shared -o ./lib/$@ $^  -L./lib


prog: prog.o libjp.a libgr.so

prog.o: prog.c libgr.h libjp.h

libjp.a: pj.o pp.o

pj.o: pj.c

pp.o: pp.c

libgr.so: pg.o pr.o

pg.o: pg.c
    
pr.o: pr.c

标签: linuxbashubuntumakefile

解决方案


我不明白您所说的“在哪个文件夹中”是什么意思,您必须在运行程序之前完成您的外壳程序。

所以,如果你运行这个:

$ make

$ ./bin/prog

你得到一个错误,你应该使用这个:

$ make

$ export LD_LIBRARY_PATH=$(pwd)/lib

$ ./bin/prog

不要像我在评论中提到的那样将设置放在 makefileLD_LIBRARY_PATH


推荐阅读