我正在对现有项目进行一些修改,这个项目非常大,所以它是用autotools构建的。修改涉及Ibex库,所以我在其中一个源文件中添加了#include“ibex.h”。库已正确安装在我的系统上,我有以下文件:
pkg-config命令的结果:
$ pkg-config --libs ibex
-L/usr/local/lib -libex -lprim -lClp -lCoinUtils -lm
$ pkg-config --cflags ibex
-frounding-math -ffloat-store -I/usr/local/include -I/usr/local/include/ibex
我想要使用ibex的compil单元对应的原始Makefile.am如下:
noinst_LTLIBRARIES = liblrasolver.la
AM_CPPFLAGS=$(config_includedirs)
liblrasolver_la_SOURCES = LAVar.h LAVar.C Delta.h Delta.C LRASolver.h LRASolver.C LAArray.h LAArray.C LARow.h LARow.C LAColumn.h LAColumn.C
if WANT_LIBRARY
include_HEADERS = Delta.h LAArray.h LAColumn.h LARow.h LAVar.h LRASolver.h
endif
我这样修改了它:
noinst_LTLIBRARIES = liblrasolver.la
AM_CPPFLAGS=$(config_includedirs) `pkg-config --cflags ibex`
AM_LDFLAGS=`pkg-config --libs ibex` -lblas -llapack
liblrasolver_la_SOURCES = LAVar.h LAVar.C Delta.h Delta.C LRASolver.h LRASolver.C LAArray.h LAArray.C LARow.h LARow.C LAColumn.h LAColumn.C
if WANT_LIBRARY
include_HEADERS = Delta.h LAArray.h LAColumn.h LARow.h LAVar.h LRASolver.h
endif
通过查看随ibex源提供的通用Makefile编译ibex项目来实现此修改:
SRCS=$(wildcard *.cpp)
BINS=$(SRCS:.cpp=)
CXXFLAGS := $(shell pkg-config --cflags ibex)
LIBS := $(shell pkg-config --libs ibex) -lblas -llapack
ifeq ($(DEBUG), yes)
CXXFLAGS := $(CXXFLAGS) -O0 -g -pg -Wall -frounding-math
else
CXXFLAGS := $(CXXFLAGS) -O3 -DNDEBUG -Wno-deprecated -frounding-math
endif
all: $(BINS)
% : %.cpp
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -o $@ $< $(LIBS)
clean:
rm -f $(BINS)
好的,autoreconf工作,以及./configure(虽然它的输出从来没有谈到我发现可疑的“ibex”)。但是失败了。找不到标题:
../../../src/tsolvers/lrasolver/LRASolver.h:38:18: fatal error: ibex.h: No such file or directory
#include "ibex.h"
答案 0 :(得分:0)
您未正确使用pkg-config
。您应该使用PKG_CHECK_MODULES
宏,请参阅参考https://autotools.io/pkgconfig/pkg_check_modules.html(完全披露:我写过。)
您还错误地使用AM_LDFLAGS
,因为库不是ldflags。您应该使用_LIBADD
。