Makefile没有使用include/library路径?

Lia*_*dri 4 c++ makefile include

好吧,经过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
Run Code Online (Sandbox Code Playgroud)

包含路径有问题,因为我在/ usr/include/mysql中明显存在时会遇到mysql_version.h不存在的错误.

它说,检查输出的第一部分

g++ -g -Wall   -c -o main.o main.cpp
Run Code Online (Sandbox Code Playgroud)

这让我觉得我在Makefile中格式化了一些错误的东西(由于额外的空格和缺少include/library路径).但是,我查看了很多关于Makefile和g ++选项的手册和文章......没有进展.

我认为这应该是一个简单的修复.请帮忙(你感觉到我的绝望吗?).

另外,你认为有必要特别指定库吗?我在XCode中运行这些东西很好,但我正在尝试将代码迁移到我的Web服务器...... Makefile已经停止了所有进度,我认为这是我应该学习的东西.

MJD*_*MJD 11

在makefile中,您已将include指令添加到链接阶段,而不是编译阶段.

线条

${PROG}:        $(OBJS)
            $(CXX) $(INCLUDES) -o $(PROG) $(OBJS) $(LIBS)
Run Code Online (Sandbox Code Playgroud)

假设通过调用$ {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
Run Code Online (Sandbox Code Playgroud)

这样,您的CXXFLAGS(用于编译阶段)现在应该拾取您的include指令.