2016-07-05 17 views
0

Ich mache einige Änderungen an einem bestehenden Projekt, das ziemlich groß ist, also ist es mit den Autotools gebaut. Die Änderungen betreffen die Ibex-Bibliothek, daher habe ich in einer der Quelldateien #include "ibex.h" hinzugefügt. Die Bibliothek ist auf meinem System richtig installiert ist, habe ich die folgenden Dateien:Hinzufügen einer Bibliothek

  • /usr/local/lib/libibex.a
  • /usr/local/include/ibex/ibex.h
  • /usr/local/share/pkgconfig/ibex.pc

Ergebnisse der pkgconfig Befehle:

$ 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 

die ursprüngliche Makefile.am zum compil entsprechenden Einheit I ibex zu verwenden bekommen will, ist wie folgt:

durch einen Blick in die generische Makefile
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 

Kamen diese Modifikation mit ibex Quellen zusammen zu kompilieren:

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 

ich es auf diese Weise geändert ibex Projekte:

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) 

Ok, autoreconf Werke sowie configure (obwohl seine Ausgabe spricht nie über „Steinböcke“, die ich verdächtige schon finden). Aber scheitern macht. Die Kopfzeile wird nicht gefunden:

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

Antwort

0

Sie verwenden pkg-config nicht korrekt. Sie sollten die PKG_CHECK_MODULES Makro verwenden, siehe Referenz https://autotools.io/pkgconfig/pkg_check_modules.html (vollständige Offenlegung: Ich schrieb, dass.)

Sie sind auch AM_LDFLAGS falsch verwenden, da Bibliotheken sind nicht ldflags. Sie sollten _LIBADD verwenden.