Makefile没有使用include / library路径?

时间:2012-02-18 07:07:53

标签: c++ include makefile

嗯,经过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已经停止了所有进度,我认为这是我应该学习的东西。

1 个答案:

答案 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指令。