2012-12-13 68 views
0

我有一個makefile,用於我正在使用的一些代碼庫,現在我已經添加了一些代碼,使用gsl。我不太確定如何以及如何添加到makefile(我將保留它,因爲它正在調用boost)以及調用gsl。使用現有的makefile編譯gsl

這是我的makefile:

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

如果安裝在默認的路徑上GSL(在/ usr /本地/包括/ GSL)您的系統上,對源文件進行編譯命令「example.c 「將

的gcc -Wall -I在/ usr /本地/包括

庫安裝爲一個單一的文件,libgsl.a -c example.c。庫libgsl.so的共享版本也安裝在支持共享庫的系統上。這些文件的默認位置是/ usr/local/lib。如果此目錄不在鏈接器的標準搜索路徑中,則還需要將其位置作爲命令行標誌提供。

要與庫鏈接,需要指定主庫和支持cblas庫,該庫提供標準的基本線性代數子例程。如果您的系統沒有提供適合的cblas實現,則在庫libgslcblas.a中提供。下面的示例演示如何將應用程序與庫鏈接,

$ gcc的-L在/ usr/local/lib目錄example.o -lgsl -lgslcblas -lm

該選項以系統-lm鏈接數學庫。在某些系統上它不是必需的。

因此,您需要在編譯命令中指定gsl特定標誌。相應地更新Makefile。