2012-12-13 4 views
0

내가 사용하고있는 코드 라이브러리를위한 makefile이 있는데 이제는 그 코드에 gsl을 사용하는 코드를 추가했습니다. 나는 어떻게 확신 할 수 없으며 makefile에 추가해야 할 것이있다. (그것은 내가 부스트를 부르는 이래로 유지해야한다.) 그것은 gsl을 호출 할 것이다. GSL이 기본 경로에 설치되어있는 경우기존 메이크 파일로 gsl로 컴파일

CXX = g++ 
ARCH = -mtune=generic 
# ARCH = -march=core2 
# ARCH = -march=native 


COFLAGS = $(ARCH) -O3 -pipe 
CXXFLAGS = -Wall $(COFLAGS) 

PROGRAMS = getData analyzeData 
BOOSTFLAGS = -I . 
OPENMP = -fopenmp -DSUPPORT_OPENMP 

all: $(PROGRAMS) 
getData: getData.cpp common.o parse.o common.h 
    $(CXX) $(CXXFLAGS) getData.cpp common.o parse.o -o getData 
analyzeData: analyzeData.cpp common.o parse.o parameters.o 
    $(CXX) $(CXXFLAGS) $(BOOSTFLAGS) $(OPENMP) estimateCrossReplicatesExpression.cpp common.o parse.o parameters.o -o analyzeData 

parameters.o: parameters.cpp parameters.h 
parse.o: parse.cpp parse.h 
common.o: common.cpp common.h 

clean: 
    rm *.o $(PROGRAMS) 
+0

명령 줄에서 새 코드를 컴파일하는 방법을 알고 있습니까? gsl 디렉토리 (gsl 헤더 포함)가 어디에 있는지 알고 있습니까? – Beta

+0

예, 전 gsl에 대한 전체 경로가 있습니다. 그러나 나는 makefile을 사용하기를 좋아하기 때문에 여러 다른 라이브러리에 의존하기 때문에 커맨드 라인에서 내 코드를 컴파일하려하지 않았다. – user1701545

+0

gsi를 가지고 놀 필요가 없으므로 gsi를 사용하는 "HelloWorld"를 작성하고 명령 줄에서 빌드 해보십시오. – Beta

답변

0

(/ usr/지방// GSL 포함) 시스템에를, 소스 파일의 컴파일 명령 "example.c :

내 메이크입니다 "것

의 gcc -Wall -I는/usr// 지역이 라이브러리는 하나의 파일, libgsl.a으로 설치됩니다

-c example.c를 포함한다. libgsl.so 라이브러리의 공유 버전은 공유 라이브러리를 지원하는 시스템에도 설치됩니다. 이 파일의 기본 위치는/usr/local/lib입니다. 이 디렉토리가 링커의 표준 검색 경로에없는 경우 명령 행 플래그로 위치를 제공해야합니다.

라이브러리와 연결하려면 기본 기본 선형 대수 서브 루틴을 제공하는 기본 라이브러리와 지원 cblas 라이브러리를 모두 지정해야합니다. 시스템에 libgslcblas.a가 없으면 적절한 cblas 구현이 libgslcblas.a 라이브러리에 제공됩니다. 다음의 예는, 라이브러리와 응용 프로그램을 연결하는 방법을 보여줍니다

$ gcc가 -L/usr/지방/lib에 example.o에 -lgsl -lgslcblas -lm

옵션 시스템에 -lm 링크 수학 도서관. 일부 시스템에서는 필요하지 않습니다.

따라서 컴파일 명령에 gsl 특정 플래그를 지정해야합니다. 그에 따라 Makefile을 업데이트하십시오.