3. 构建 LAMMPS
LAMMPS 使用与 GNU make 一起使用的传统 makefile(可能需要手动编辑)或使用 CMake 生成的构建环境(Unix Makefiles、Ninja、Xcode、Visual Studio、KDevelop、代码块等等)。
作为替代方案,您可以下载包含预构建可执行文件或自动构建树的包,如手册的安装部分所述。
3.1.使用 CMake 构建 LAMMPS
本部分介绍了如何使用 CMake 来构建 LAMMPS。有关特定编译时设置以及启用和配置附加包的选项的详细信息将在这些包中讨论。链接到“构建概述”页面上的这些页面。
以下文本假设您对 CMake 有一定的了解,并重点介绍如何使用命令行工具 cmake
以及构建 LAMMPS 支持哪些设置。有关如何使用 CMake 本身、文本模式或图形用户界面来更改不同构建工具和开发环境生成的输出文件的更详细教程位于单独的页面上。
注:LAMMPS 目前要求 CMake 版本 3.16 或更高版本可用。
警告:您不得将传统的基于 make 的 LAMMPS 构建过程与 CMake 混合使用。不得安装任何软件包,也不得使用 make <machine>
在 LAMMPS 源目录中尝试构建任何软件包。 CMake 将检测是否属于这种情况并生成错误。要从 src
中删除冲突文件,您可以使用命令 make no-all purge
,该命令将卸载所有包并删除所有自动生成的文件。
3.1.1.使用 CMake 的优点
CMake 是通过(手动定制)makefile 以传统方式编译 LAMMPS 的替代方案。使用 CMake 具有多种优势,对于编译软件经验有限的人或想要修改或扩展 LAMMPS 的人特别有帮助。
- CMake可以检测可用的硬件、工具、特性和库,并相应地调整LAMMPS的默认构建配置。
- CMake可以为不同的构建工具和集成开发环境(IDE)生成文件。
- CMake支持使用命令行、文本模式或图形用户界面自定义设置。不需要手动编辑文件,不需要了解文件格式或复杂的命令行语法。
- 所有启用的组件都在单个生成操作中编译。
- 自动跟踪所有文件和配置选项的依赖关系。
- 支持真正的外源编译。可以从同一源代码树中同时配置和构建具有不同LAMMPS包、设置或编译器选择的多个配置和设置。
- 简化了Linux发行版、环境模块或自动构建工具(如Homebrew)的LAMMPS包装。
- 自动化单元和回归测试的集成(LAMMPS方面仍在积极开发中)。
3.1.2.开始使用
使用 CMake 构建 LAMMPS 是一个两步过程。第一步,使用 CMake 在新目录中生成构建环境。为此,您可以使用命令行实用程序 cmake
(或 cmake3
)、文本模式 UI 实用程序 ccmake
(或 ccmake3
,或互换使用它们。第二步是使用选定的构建工具编译和链接所有对象、库和可执行文件。下面是一个使用 CMake 命令行版本构建 LAMMPS 的最小示例,未启用附加包且未进行自定义:
cd lammps # change to the LAMMPS distribution directory
mkdir build; cd build # create and use a build directory
cmake ../cmake # configuration reading CMake scripts from ../cmake
cmake --build . # compilation (or type "make")
这将创建并更改为名为 build
的文件夹,然后运行配置步骤为默认构建命令生成构建文件,然后启动该构建命令来编译 LAMMPS。在配置步骤中,CMake 将尝试检测是否支持 MPI、OpenMP、FFTW、gzip、JPEG、PNG 和 ffmpeg,并启用相应的配置设置。可以在屏幕上跟踪此配置的进度,并在最后打印所选选项和设置的摘要。 cmake --build .
命令将启动编译,如果成功,最终将在 build
和 LAMMPS 可执行文件 lmp
> 文件夹。
编译可能需要很长时间,因为 LAMMPS 是一个具有许多功能的大型项目。如果您的机器有多个 CPU 核心(现在大多数都是这样),您可以通过与 make -j N
并行编译源代码(N 是并发执行任务的最大数量)来加快速度。安装 ccache(= Compiler Cache)软件可能会进一步加快重复编译的速度,例如在代码开发过程中,尤其是在分支之间反复切换时。
初始构建后,每当您编辑 LAMMPS 源文件、启用或禁用软件包、更改编译器标志或构建选项时,都必须使用 cmake --build .
(或 make
,然后再次编译。包含的依赖项跟踪应确保仅重新编译必要的文件子集。您还可以使用 cmake --build . --target clean
(或 make clean
)删除已编译的对象、库和可执行文件。
编译后,您可以选择使用以下命令将 LAMMPS 可执行文件安装到您的系统中:
make install # optional, copy compiled files into installation location
这将安装 LAMMPS 可执行文件和库、一些工具(如果已配置)以及其他文件,例如 LAMMPS API 标头、联机帮助页、势场和力场文件。安装树的位置默认为 ${HOME}/.local
。
3.1.3.配置和构建选项
CMake 命令有一个强制参数:包含名为 CMakeLists.txt
的文件的文件夹(对于 LAMMPS,它位于 cmake
文件夹中)或包含名为 CMakeCache.txt
要修改设置、启用或禁用功能,您需要使用 -D 命令行标志 ( -D VARIABLE1_NAME=value
) 设置变量或在图形用户界面的文本模式中更改它们。 -D 标志可以在一个命令中使用多次。
为了您的方便,我们提供了 CMake 预设,它结合了多个设置来启用可选的 LAMMPS 包或使用不同的编译器工具链。它们使用 -C 标志 ( -C ../cmake/presets/basic.cmake
) 加载。此步骤只需要一次,因为预设文件中的设置存储在 CMakeCache.txt
文件中。还可以通过向 CMake 命令行添加一个或多个 -D 标志来自定义构建。
可以使用 -G 命令行标志来选择为备用构建工具(例如 Ninja)生成文件以及为 Eclipse、CodeBlocks 或 Kate 等 IDE 生成项目文件。运行 cmake --help
时,会给出特定 CMake 版本的可用生成器设置列表。
3.1.4.多配置构建系统
在本手册中,主要假设 LAMMPS 是在类 Unix 操作系统上构建的,并以“make”作为底层“构建器”,因为这是最常见的情况。在这种情况下,使用 -D CMAKE_BUILD_TYPE=<configuration>
选择构建“配置”,其中 <configuration>
是“Release”、“Debug”、“RelWithDebInfo”或“MinSizeRel”之一。然而,一些构建工具也可以使用甚至需要所谓的多配置构建系统设置。对于多配置构建,在编译时使用相同的构建文件选择构建类型(或配置)。例如。和:
cmake --build build-multi --config Release
在这种情况下,生成的二进制文件不会直接位于构建文件夹中,而是位于与构建类型对应的子目录中(即上面示例中的 Release )。类似地,对于运行单元测试,使用 -C 标志选择配置:
ctest -C Debug
LAMMPS 中的 CMake 脚本基本支持使用多配置构建系统进行编译,但并非所有脚本都已被移植。这特别适用于编译需要由 CMake 下载和编译的附加库的包。 windows.cmake
预设文件尝试跟踪哪些包可以使用开箱即用的 MSVC 编译器进行本机编译。并非所有外部库都可以移植到 Windows。
3.1.5.安装 CMake
检查您的机器是否已安装 CMake:
which cmake # do you have it?
which cmake3 # version 3 may have this name
cmake --version # what specific version you have
在使用环境模块管理软件包的集群或超级计算机上,执行以下操作:
module list # is a module for cmake already loaded?
module avail # is a module for cmake available?
module load cmake # load cmake module with appropriate name
大多数 Linux 发行版通过其包管理系统提供预编译的 cmake 包。如果您没有 CMake 或足够新的版本(注意:对于 CentOS 7.x,您需要启用 EPEL 存储库),您可以从 https://cmake.org/download/ 下载最新版本。有关如何在各种平台上安装它的说明可以在此页面上找到。