嗯,经过3个小时的研究,我即将疯狂,所以我觉得是时候将它传递给一些新的眼睛了。
CXXFLAGS = -g -Wall
OBJS = main.o
PROG = test
INCLUDES = -I /usr/include/mysql -I /usr/local/include
LIBS = -L /usr/lib/mysql -l libmysqlclient.so.15.0.0 -L /usr/local/lib -l libmysqlpp.so.3.1.0
all: $(PROG)
${PROG}: $(OBJS)
$(CXX) $(INCLUDES) -o $(PROG) $(OBJS) $(LIBS)
clean:; $(RM) -f $(PROG) core *.o
包含路径有问题,因为我发现mysql_version.h在/ usr / include / mysql中明显存在时不存在错误。
检查输出的第一部分,它说
g++ -g -Wall -c -o main.o main.cpp
这让我觉得我在Makefile中格式化了一些错误(由于额外的空格和缺少include / library路径)。但是,我查看了很多关于Makefile和g ++选项的手册和文章......没有进展。
我认为这应该是一个简单的修复。请帮忙(你感觉到我的绝望吗?)。
另一方面,您认为有必要明确指定库吗?我在XCode中运行这些东西很好,但我正在尝试将代码迁移到我的Web服务器...... Makefile已经停止了所有进度,我认为这是我应该学习的东西。
答案 0 :(得分:11)
在您的makefile中,您已将include指令添加到链接阶段,而不是编译阶段。
行
${PROG}: $(OBJS)
$(CXX) $(INCLUDES) -o $(PROG) $(OBJS) $(LIBS)
通过调用$ {CXX}中的编译器传递include文件夹(以及其他参数)来说,从$ {OBJS}中的目标文件中创建$ {PROG}中的程序。相反,对于您的变量部分,请执行以下操作:
INCLUDES = -I /usr/include/mysql -I /usr/local/include
CXXFLAGS = -g -Wall ${INCLUDES}
OBJS = main.o
PROG = test
LIBS = -L /usr/lib/mysql -l libmysqlclient.so.15.0.0 -L /usr/local/lib -l libmysqlpp.so.3.1.0
这样你的CXXFLAGS(用于编译阶段)现在应该拾取你的include指令。