Makefile未链接必要的.hpp文件 我需要编译一个C++项目,它将使用项目中的外部库和头来进行线性编程CONIN或。它包含两个.cpp文件。主文件mainfarmer依赖于pm.h

Makefile未链接必要的.hpp文件 我需要编译一个C++项目,它将使用项目中的外部库和头来进行线性编程CONIN或。它包含两个.cpp文件。主文件mainfarmer依赖于pm.h,c++,makefile,C++,Makefile,pm.h拥有所有主要农场主需要使用的include线路来调用COIN-OR功能。这是pm.h的代码: #include "ClpSimplex.hpp" #include "CoinHelperFunctions.hpp" #include "CoinTime.hpp" #include "CoinBuild.hpp" #include "CoinModel.hpp" 我有一个由我的老师提供的makefile,并根据自己的需要进行了修改,但每当我试图通过运行makefile来编译项目时,我都会

pm.h拥有所有主要农场主需要使用的include线路来调用COIN-OR功能。这是pm.h的代码:

#include "ClpSimplex.hpp"
#include "CoinHelperFunctions.hpp"
#include "CoinTime.hpp"
#include "CoinBuild.hpp"
#include "CoinModel.hpp"
我有一个由我的老师提供的makefile,并根据自己的需要进行了修改,但每当我试图通过运行makefile来编译项目时,我都会遇到相同的错误:

在主farmer包含的文件中。cpp:5:0:pm.h:14:26:致命错误: ClpSimplex.hpp:没有终止此类文件或目录编译。 make:**[main farmer.o]错误1

这是生成文件:

#
P=farmer
#

EXE=$(P)
OBJS=main-farmer.o model-farmer.o param-farmer.o pm.h

ADDLIBS=-D.
ADDINCFLAGS=-I.

SRCDIR=~/coin-projects

########## 


CXX=g++
CXXFLAGS=-O3 -fomit-frame-pointer -pipe -DNDEBUG -pedantic-errors -Wimplicit -Wparentheses -Wreturn-type -Wcast-qual -Wall -Wpointer-arith -Wwrite-strings -Wconversion
CXXLINKFLAGS=-Wl,--rpath -Wl,/installed/CoinAll/lib
CC=gcc
CFLAGS=-03 -fomit-frame-pointer -pipe -DNDEBUG -pedantic-errors -Wimplicit -Wparentheses -Wsequence-point -Wreturn-type -Wcast-qual -Wall


COININCDIR=/installed/CoinAll/include/coin

#  COIN-OR libs
COINLIBDIR=/installed/CoinAll/lib

#  Clp
LIBS=-L$(COINLIBDIR) -lCbc -lCgl -lOsiClp -lOsi -lClp -lCoinUtils -lm \
`cat $(COINLIBDIR)/cgl_addlibs.txt` \
`cat $(COINLIBDIR)/clp_addlibs.txt` \
`cat $(COINLIBDIR)/coinutils_addlibs.txt` 



CLEANFILES=\
addBits.o addBits \
addColumns.o addColumns \
addRows.o addRows \
decompose.o decompose \
defaults.o defaults \
driver2.o driver2 \
driver.o driver \
driverC.o driverC \
dualCuts.o dualCuts \
ekk.o ekk \
ekk_interface.o ekk_interface \
hello.o hello \
makeDual.o makeDual \
minimum.o minimum \
network.o network \
piece.o piece \
rowColumn.o rowColumn \
sprint2.o sprint2 \
sprint.o sprint \
testBarrier.o testBarrier \
testBasis.o testBasis \
testGub2.o testGub2 \
testGub.o testGub \
testQP.o testQP \
useVolume.o useVolume

# Part 3
#

all: $(EXE)

.SUFFIXES: .cpp .c .o .obj

$(EXE): $(OBJS)
    bla=;
    for file in $(OBJS); do bla="$$bla `$(CYGPATH_W) $$file`"; done; \
    $(CXX) $(CXXLINKFLAGS) $(CXXFLAGS) -o $@ $$bla $(ADDLIBS) $(LIBS)

####
########
############
########
####


clean:
    rm -rf $(CLEANFILES)
.cpp.o:
    $(CXX) $(CXXFLAGS) $(INCL) -c -o $@ `test -f '$<' || echo '$(SRCDIR)/'`$<
.cpp.obj:
    $(CXX) $(CXXFLAGS) $(INCL) -c -o $@ `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(SRCDIR)/$<'; fi`
.c.o:
    $(CC) $(CFLAGS) $(INCL) -c -o $@ `test -f '$<' || echo '$(SRCDIR)/'`$<
.c.obj:
    $(CC) $(CFLAGS) $(INCL) -c -o $@ `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(SRCDIR)/$<'; fi`
#
P=农民
#
EXE=$(P)
OBJS=主农场主.o模型农场主.o参数农场主.o pm.h
ADDLIBS=-D。
ADDINCFLAGS=-I。
SRCDIR=~/coin项目
########## 
CXX=g++
CXXFLAGS=-O3-fomit帧指针-pipe-DNDEBUG-PEDATIC错误-Wimplicit-WPARENTESES-Wreturn类型-Wcast qual-Wall-Wpointer arith-Wwrite strings-Wconversion
CXXLINKFLAGS=-Wl,--rpath-Wl,/installed/CoinAll/lib
CC=gcc
CFLAGS=-03-fomit帧指针-pipe-DNDEBUG-pedantic错误-Wimplicit-wparenthesses-Wsequence point-Wreturn类型-Wcast qual-Wall
coincdir=/installed/CoinAll/include/coin
#投币或libs
COINLIBDIR=/installed/CoinAll/lib
#中电
LIBS=-L$(COINLIBDIR)-lCbc-lCgl-lOsiClp-lOsi-lClp-lcinutils-lm\
`cat$(COINLIBDIR)/cgl_addlibs.txt`\
`cat$(COINLIBDIR)/clp_addlibs.txt`\
`cat$(COINLIBDIR)/coinutils\u addlibs.txt`
清除文件=\
addBits.o addBits\
addColumns.o addColumns\
addRows.o addRows\
分解\
默认值\
驱动程序2\
司机\
driverC.o driverC\
双重切割,双重切割\
ekk.o ekk\
ekk_接口。o ekk_接口\
你好,你好\
o makeDual\
最小值\
网络\
一块,一块\
rowColumn.o rowColumn\
sprint2.o sprint2\
斯普林特\
testBarrier.o testBarrier\
testBasis.o testBasis\
testGub2.o testGub2\
testGub.o testGub\
testQP.o testQP\
useVolume.o useVolume
#第三部分
#
全部:$(EXE)
.后缀:.cpp.c.o.obj
$(EXE):$(OBJS)
bla=;
对于文件,单位为$(OBJS);do bla=“$$bla`$(CYGPATH_W)$$file`”;完成\
$(CXX)$(CXXLINKFLAGS)$(CXXFLAGS)-o$@$$bla$(ADDLIBS)$(LIBS)
####
########
############
########
####
清洁:
rm-rf$(干净文件)
.cpp.o:

$(CXX)$(cxflags)$(INCL)-c-o$@`test-f'$您的Makefile定义了
coincdir
,它可能指向.hpp头的父目录。编译器需要找到这些变量,由于没有使用变量,因此解释了为什么找不到这些变量。
如果将-I$(COININCDIR)添加到
cxflags
,编译器将能够找到它们。

ClpSimplex.hpp
文件在哪里?你需要告诉你的编译器这个路径(使用
-I
或类似的方法);do bla=“$$bla`$(CYGPATH_W)$$file`”;完成:-P…@πάνταῥεῖ 是的,这个makefile相当糟糕。
.cpp.o:
类型规则有点过时。如果您使用的是Gnu make,那么您应该使用
%o:%cpp
它更强大、更易于使用。很抱歉,我忘了编辑我的帖子,说ClpSimplex.hpp位于指定为coincdir的目录中。