Skip to main content
Version: 0.2.0

编译构建

Crystal MD使用CMake工具进行编译构建,如果你不熟悉CMake,可以参考CMake的相关文档。 在正式进行构建之前,确保你的系统已经安装并配置了CMake工具、相符版本的c++编译器、MPI环境等, 且确保已经正确配置了环境相关变量(如CC CXX环境变量)。

1.使用CMake工具编译#

我们强烈推荐使用CMake外部构建(out-of-source build)方式进行构建:

cd $MD_PATHcmake -B./build -H./cmake --build ./build -j 4  # build using 4 processors.

执行以上步骤后,编译完成的可执行Crystal MD程序会放在$MD_PATH/build/bin目录。

2.构建选项#

如果你需要将编译完成的二进制文件安装到指定目录,可以用以下命令进行构建,并安装:

cd $MD_PATHcmake -B./build -H./ -DCMAKE_INSTALL_PREFIX=/your/desirable/path/cmake --build ./build -j 4make install

在执行cmake命令的时候,除了可以指定CMAKE_INSTALL_PREFIX等CMake构建工具内置的参数外,还可以指定以下参数:

参数取值默认值说明
TEST_ENABLE_FLAGON/OFFON是否构建test (单元测试)

例如,如果你不希望构建单元测试和tools目录,可以使用如下的命令进行构建:

cd $MD_PATHcmake -B./build -H./ -DTEST_ENABLE_FLAG=OFFcmake --build ./build -j 4

v0.2.0 版本已知的编译问题#

  1. no matching function for call to toml:: Value::as<long int>() const
config.cpp: In member function 'void config::resolveConfig(std::__cxx11::string)':CrystalMD-v0.2.0/src/config.cpp:94:45: error: no matching function for call to 'toml::Value::as<long int>() const'         timeSteps = tomlTimeSteps->as<long>();                                             ^In file included from CrystalMD-v0.2.0/src/config.cpp:4:CrystalMD-v0.2.0/src/include/toml.hpp:1406:49: note: candidate: 'template<class T> typename toml::call_traits<T>::return_type toml::Value::as() const'     inline typename call_traits<T>::return_type Value::as() const {

编辑 $MD_PATH/src/config.cpp文件:

-    if (tomlTimeSteps && tomlTimeSteps->is<long>()) {-        timeSteps = tomlTimeSteps->as<long>();+    if (tomlTimeSteps && tomlTimeSteps->is<int>()) {+        timeSteps = tomlTimeSteps->as<int>();    }    ...-    if (tomlCollisionSteps && tomlCollisionSteps->is<long>()) {-        collisionSteps = tomlCollisionSteps->as<long>();+    if (tomlCollisionSteps && tomlCollisionSteps->is<int>()) {+        collisionSteps = tomlCollisionSteps->as<int>();    }
  1. No rule to make target `src/CMakeFiles/CrystalMD.dir/depend'.
[ 88%] Linking CXX static library ../lib/libcrystalmd.a[ 88%] Built target crystalmdmake[2]: *** No rule to make target `src/CMakeFiles/CrystalMD.dir/depend'.  Stop.make[1]: *** [src/CMakeFiles/CrystalMD.dir/all] Error 2make: *** [all] Error 2

编辑 src/CMakeLists.txt 文件:

# make crystal-md lib-set(MD_LIB_NAME crystalmd)+set(MD_LIB_NAME md)