Makefile 使用OpenBLAS、ARPACK、LAPACK和SuperLU构建静态犰狳
我们有一个HPC环境,其中包含大多数软件包的多个版本,这使得我们设计了一种自滚方式,在独特的位置安装软件包,并使用环境模块让程序员/研究人员能够识别他们在构建程序、运行程序或两者同时使用时使用的库版本。是否有一种相对轻松的方法可以在这种环境中执行构建。在我的例子中,我们在建造犰狳时使用了OpenBLAS、ARPACK、LAPACK和SuperLU。就我而言,我在为犰狳-0.3.7射击。如果像在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
/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