C++ linux中如何将静态库链接到makefile
我已经使用数据库makefileproject/database/makefile创建了一个静态库,如下所示C++ linux中如何将静态库链接到makefile,c++,linux,makefile,C++,Linux,Makefile,我已经使用数据库makefileproject/database/makefile创建了一个静态库,如下所示 rm -rf libdatabase.a database.o: database.cpp database.h g++ -c -o database.o database.cpp ar rvs libdatabase.a database.o if [ -f libdatabase.a ]; then echo "Database-Library Build S
rm -rf libdatabase.a
database.o: database.cpp database.h
g++ -c -o database.o database.cpp
ar rvs libdatabase.a database.o
if [ -f libdatabase.a ];
then
echo "Database-Library Build Success"
cp libdatabase.a ../LIBs/
else
echo "databse-Library Build Failure"
fi
然后我将它链接到main make fileproject/main/Makefile中,如下所示
rm -rf testdate
INCPATH = -I../database
LIBPATH = -L../LIBs
testdate:main.o libdatabase.a
g++ -o testdate libdatabase.a main.o
main.o: main.cpp database.h
g++ -c -o main.o main.cpp
但它的抛出错误如下:
make:*没有规则使目标database.h',这是main.o'所需要的。停下来
请找个人帮我解决这个问题。我是linux新手。在LIBPATH
变量赋值末尾的makefile中有一个额外的反斜杠。这导致下一行(testdate:…
target)被认为是LIBPATH
变量值的一部分。这反过来意味着之后的配方行(g++-o testdate…
行)没有定义目标,这就是为什么会出现该错误
删除反斜杠:
LIBPATH = -L../LIBs
谢谢回复,工作正常,我还有一个问题,请检查一下,如果你有不同的问题,你应该打开一个新的SO问题。此错误表示您已将文件
database.h
列为先决条件,但make找不到该文件。它存在吗?它在其他目录中吗?Make无法猜测它在文件系统中的位置,因此如果您编写database.h
Make将查找当前目录,如果它不在当前目录中,它将失败。