2016-07-05 48 views
0

我正在对一个相当大的现有项目进行一些修改,所以它是用自动工具构建的。修改涉及Ibex库,所以我在其中一个源文件中添加了#include“ibex.h”。该库已正确安装我的系统上,我有以下文件:添加一个库

  • /usr/local/lib/libibex.a
  • /usr/local/include/ibex/ibex.h
  • /USR /本地/共享/ pkgconfig/ibex.pc

的pkgconfig命令的结果:

$ 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 

对应于可以编译原始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 

通过寻找与山羊源编译一起提供的通用的Makefile来到这个修改山羊项目:

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 [email protected] $< $(LIBS) 

clean: 
    rm -f $(BINS) 

好吧,autoreconf作品,还有的./configure(虽然它的输出从未对“山羊”,我觉得可疑的谈判已经)。但失败。

../../../src/tsolvers/lrasolver/LRASolver.h:38:18: fatal error: ibex.h: No such file or directory 
#include "ibex.h" 

回答

0

您没有使用正确pkg-config:没有找到头。

您还使用AM_LDFLAGS错误,因为库不LDFLAGS:你应该使用PKG_CHECK_MODULES宏,请参阅参考https://autotools.io/pkgconfig/pkg_check_modules.html(我写的完全披露)。你应该使用_LIBADD