使用gsl和现有makefile编译

使用gsl和现有makefile编译,makefile,gsl,Makefile,Gsl,我为我正在使用的一些代码库创建了一个makefile,现在我在代码中添加了一些使用gsl的代码。我不太确定如何以及向调用gsl的makefile中添加什么(我想保留它,因为它也在调用boost) 这是我的生成文件: CXX = g++ ARCH = -mtune=generic # ARCH = -march=core2 # ARCH = -march=native COFLAGS = $(ARCH) -O3 -pipe CXXFLAGS = -Wall $(COFLAGS) PR

我为我正在使用的一些代码库创建了一个makefile,现在我在代码中添加了一些使用gsl的代码。我不太确定如何以及向调用gsl的makefile中添加什么(我想保留它,因为它也在调用boost)

这是我的生成文件:

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)

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

gcc-Wall-I/usr/local/include-c示例.c

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

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

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

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


因此,您需要在compile命令中指定特定于gsl的标志。相应地更新生成文件。

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

gcc-Wall-I/usr/local/include-c示例.c

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

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

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

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


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

您知道如何在命令行上编译新代码吗?你知道gsl目录(包含gsl头)在哪里吗?是的,我有gsl的完整路径。但是,我没有尝试在命令行上编译代码,因为它依赖于其他几个库,所以我更喜欢使用makefile。我没有gsi可玩,所以我建议您编写一个使用gsi的“HelloWorld”,并尝试从命令行构建它。您知道如何在命令行上编译新代码吗?你知道gsl目录(包含gsl头)在哪里吗?是的,我有gsl的完整路径。但是,我没有尝试在命令行上编译代码,因为它依赖于其他几个库,所以我更喜欢使用makefile。我没有gsi可以使用,所以我建议您编写一个使用gsi的“HelloWorld”,并尝试从命令行构建它。