编译构建
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_FLAG | ON/OFF | ON | 是否构建test (单元测试) |
例如,如果你不希望构建单元测试和tools目录,可以使用如下的命令进行构建:
cd $MD_PATHcmake -B./build -H./ -DTEST_ENABLE_FLAG=OFFcmake --build ./build -j 4
#
v0.2.0 版本已知的编译问题- 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>(); }
- 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)