Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Makefile 使用OpenBLAS、ARPACK、LAPACK和SuperLU构建静态犰狳_Makefile_Cmake_Static_Armadillo_Openblas - Fatal编程技术网

Makefile 使用OpenBLAS、ARPACK、LAPACK和SuperLU构建静态犰狳

Makefile 使用OpenBLAS、ARPACK、LAPACK和SuperLU构建静态犰狳,makefile,cmake,static,armadillo,openblas,Makefile,Cmake,Static,Armadillo,Openblas,我们有一个HPC环境,其中包含大多数软件包的多个版本,这使得我们设计了一种自滚方式,在独特的位置安装软件包,并使用环境模块让程序员/研究人员能够识别他们在构建程序、运行程序或两者同时使用时使用的库版本。是否有一种相对轻松的方法可以在这种环境中执行构建。在我的例子中,我们在建造犰狳时使用了OpenBLAS、ARPACK、LAPACK和SuperLU。就我而言,我在为犰狳-0.3.7射击。如果像在/configure和make天那样使用开关会非常好。但到目前为止,我所发现的只是CMakebuilds

我们有一个HPC环境,其中包含大多数软件包的多个版本,这使得我们设计了一种自滚方式,在独特的位置安装软件包,并使用环境模块让程序员/研究人员能够识别他们在构建程序、运行程序或两者同时使用时使用的库版本。是否有一种相对轻松的方法可以在这种环境中执行构建。在我的例子中,我们在建造犰狳时使用了OpenBLAS、ARPACK、LAPACK和SuperLU。就我而言,我在为犰狳-0.3.7射击。如果像在
/configure
make
天那样使用开关会非常好。但到目前为止,我所发现的只是
CMake
builds,而且构建似乎非常简单

哦,是的。顺便说一下,输出犰狳库需要是静态的


提前感谢你的帮助。最初的问题可能有点模糊,但我可以说得很具体。我只是不想为这个问题的最初问题写一本小说。

现在已有工具来处理这些科学软件构建的复杂性。我建议你要么看看,要么看看。通过自动构建所有必需的依赖项,并生成模块文件供用户使用所构建的软件,该工具将帮助您节省大量时间。

可以修改
CMakeList.txt
文件和其他与CMake相关的文件,以满足您的需要。标志在第48+行定义,例如
set(ARMA\u USE\u LAPACK false)
然后在第250行的
include(ARMA_FindLAPACK)
中定义与LAPACK库相关的变量。如果找到lapack,则在第347行上切换中的标志

可以在文件cmake_aux/ARMA_FindLAPACK.cmake中指定LAPACK所在的自定义路径。如果自定义路径作为环境变量存储为
export PATHLAPACKLIB=/usr/lib/openblas base
,则可以通过修改第11行在ARMA_FindLAPACK.cmake文件中使用它(请参见和):

这并不是对CMakefile的漂亮修改,因为它使其不可移植,因为其结果取决于环境变量。但是,如果你打算一劳永逸地建造和安装犰狳,它就行了。记住每次修改CMakeFile.txt时都要删除CMakeCache.txt文件,否则它会保留一些以前运行的
cmake.
的痕迹,并且看起来修改似乎是不必要的

要使库成为静态的,请将关键字static添加到CMakeFile.txt第514行的命令
add_library()
,如所示:

运行
cmake.
然后运行
make
会创建一个小犰狳文件,因为大部分源文件都包含在cpp头文件中。 最后,示例1编译为:

g++ -O2 -std=c++11 example1.cpp -o example1 -larmadillo -L/home/...../softs/armadillo-9.800.3/armadillo-9.800.3 -I/home/...../softs/armadillo-9.800.3/armadillo-9.800.3/include -lopenblas

非常感谢。我会调查的。我们使用的操作系统版本恰好比推荐的版本旧-CentOS 6.x。但我会考虑的。
add_library( armadillo  STATIC ...)
g++ -O2 -std=c++11 example1.cpp -o example1 -larmadillo -L/home/...../softs/armadillo-9.800.3/armadillo-9.800.3 -I/home/...../softs/armadillo-9.800.3/armadillo-9.800.3/include -lopenblas