使用现有的makefile使用gsl进行编译

时间:2012-12-13 19:36:53

标签: makefile gsl

我有一些我正在使用的代码库的makefile,现在我已经在代码中添加了一些使用gsl的代码。我不太确定如何以及将什么添加到makefile(我会保留,因为它也会调用boost),这将调用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)

1 个答案:

答案 0 :(得分:1)

如果GSL安装在系统上的默认路径(/ usr / local / include / gsl)上,源文件“example.c”的编译命令将为

gcc -Wall -I / usr / local / include -c example.c

该库安装为单个文件libgsl.a。库libgsl.so的共享版本也安装在支持共享库的系统上。这些文件的默认位置是/ usr / local / lib。如果此目录不在链接器的标准搜索路径上,则还需要将其位置作为命令行标志。

要链接库,您需要指定主库和支持cblas库,它提供标准的基本线性代数子程序。如果您的系统没有提供,则libgslcblas.a库中提供了合适的cblas实现。以下示例显示如何将应用程序与库链接

$ gcc -L / usr / local / lib example.o -lgsl -lgslcblas -lm

选项-lm与系统数学库链接。在某些系统上,它是不需要的。

因此,您需要在编译命令中指定gsl特定标志。相应地更新Makefile。