2016-07-05 8 views
0

꽤 큰 기존 프로젝트에 약간의 수정을 가하고 있으므로 자동 도구로 빌드되었습니다. 수정 사항에는 Ibex 라이브러리가 포함되어 있으므로 소스 파일 중 하나에 #include "ibex.h"를 추가했습니다. 라이브러리가 제대로 내 시스템에 설치되어, 나는 다음과 같은 파일이 있습니다라이브러리 추가하기

  • /usr/local/lib/libibex.a을 /usr/local/include/ibex/ibex.h
  • /usr/지방/주/pkgconfig/ibex.pc pkgconfig 명령

결과 : 원래 Makefile.am은 compil에 해당하는

$ 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 

나는 이런 식으로 수정

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 

컴파일하는 아이 벡스 소스와 함께 제공되는 일반적인 메이크 파일을 조사하여이 수정에 와서 다음과 같이 내가, 아이 벡스를 사용 싶어 단위는 아이 벡스 프로젝트 :

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를 (이미 의심스러운 찾을 수있는 '아이 벡스'에 대한 출력이 결코 회담 아니지만). 그러나 실패는 실패합니다. 당신은 제대로 pkg-config를 사용하지 않는

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

답변

0

: 헤더를 찾을 수 없습니다 않습니다. PKG_CHECK_MODULES 매크로를 사용해야합니다 (참조 용 https://autotools.io/pkgconfig/pkg_check_modules.html 참조).

라이브러리는 ldflags가 아니므로 AM_LDFLAGS도 잘못 사용하고 있습니다. _LIBADD을 사용해야합니다.

관련 문제