计算化学公社

 找回密码 Forget password
 注册 Register
Views: 990|回复 Reply: 42
打印 Print 上一主题 Last thread 下一主题 Next thread

[CP2K] 利用cmake编译和安装CP2K

[复制链接 Copy URL]

76

帖子

0

威望

416

eV
积分
492

Level 3 能力者

本帖最后由 UW_0728. 于 2026-1-22 00:50 编辑

从版本2026.1开始,CP2K的编译将全面转为cmake,彻底放弃原有的GNU makefile和相应的arch文件集。个人感觉在cmake下编译比传统的编译模式报错概率更低一点。然而,目前toolchain尚未实现针对自定义的配置设计合适的cmake指令,因此只能自己根据CMakeLists.txt里面的选项逐个添加与既有toolchain配置相对应的到命令行中,比较麻烦,且开发者貌似并不打算解决这一点;另外,目前无法通过cmake同时编译ssmp和psmp(检测出MPI就只编译psmp,否则只编译ssmp),且编译成的程序没有相应的符号链接sopt和popt,不过这不算什么大问题,毕竟psmp同时支持MPI和OpenMP并行,只要设置OMP_NUM_THREADS为物理核心数且不用mpirun指令就相当于运行ssmp,只要export OMP_NUM_THREADS=1 并利用mpirun -np N (N为并行核数)运行就相当于运行popt了。

接下来讲一讲从cmake编译CP2K可执行文件的基本步骤:(假设为root用户,使用2026.1版本;更早版本用传统模式编译更省事一点)

1. 按照社长的文章(http://sobereva.com/586)正常完成toolchain工具链安装步骤,然后执行source /root/CP2K/src/cp2k-2026.1/tools/toolchain/install/setup

2. 切到cp2k源码目录,执行mkdir build && cd build,进入构建和编译专用目录。

3. 运行构建指令。如上所述,这里需要手动输入构建选项。假如完全按照社长文章里的选项配置好toolchain,那么你所需要的cmake命令为:
cmake .. -DCMAKE_INSTALL_PREFIX=../install -DCP2K_USE_MPI=ON -DCP2K_USE_FFTW3=ON -DCP2K_USE_LIBINT2=ON -DCP2K_USE_LIBXC=ON -DCP2K_USE_SPGLIB=ON -DCP2K_USE_VORI=ON -DCP2K_USE_COSMA=ON -DCP2K_USE_ELPA=ON -DCP2K_USE_LIBXSMM=ON -DCP2K_USE_PLUMED=ON -DCP2K_DATA_DIR=/root/CP2K/src/cp2k-2026.1/data

这里包括toolchain默认安装的,以及根据自己的设置选择多安装或不安装的包。命令中的-DCMAKE_INSTALL_PREFIX 设置到自己想安装到的路径(可以使用相对路径;为省事我直接设置在了父目录下的一个新文件夹;如果不设置,默认将为/usr/local)。由于OpenBLAS是强制性的、Scalapack在有MPI的情况下是强制性的,因此无论如何它们都会被检查,这里无需写出。之所以特别设置-DCP2K_DATA_DIR=/root/CP2K/src/cp2k-2026.1/data是因为cmake构建系统安装好后默认读取基组的位置是${CMAKE_INSTALL_PREFIX}/shared/cp2k/data,会导致编译时生成与/root/CP2K/src/cp2k-2026.1/data内容完全重复的/root/CP2K/src/cp2k-2026.1/install/shared/cp2k/data目录,加上这一设置可以避免这一问题(但注意这里不能使用相对路径)

4. 构建完成后,运行
make install -jN,N是并行核数。

5. 写入以下三行至~/.bashrc中以添加环境变量:
export PATH=$PATH:/root/CP2K/src/cp2k-2026.1/install/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/root/CP2K/src/cp2k-2026.1/install/lib64
source /root/CP2K/src/cp2k-2026.1/tools/toolchain/install/setup


6. 如果硬盘有点吃紧,可以
删除该build文件夹(或者不删除但在build目录内执行make clean)以腾出部分空间。

评分 Rate

参与人数
Participants 3
eV +10 收起 理由
Reason
北大-陶豫 + 5
牧生 + 2 终于装上2025.2了
LittlePupil + 3 谢谢分享

查看全部评分 View all ratings

9

帖子

0

威望

61

eV
积分
70

Level 2 能力者

2#
发表于 Post on 2026-1-7 22:31:16 | 只看该作者 Only view this author
  1. [root[url=home.php?mod=space&uid=84862]@m1racle[/url] build]# cmake -S .. -DCMAKE_INSTALL_PREFIX=.. -DCP2K_USE_MPI=ON -DCP2K_USE_FFTW3=ON -DCP2K_USE_LIBINT2=ON -DCP2K_USE_LIBXC=ON -DCP2K_USE_SPGLIB=ON -DCP2K_USE_VORI=ON -DCP2K_USE_COSMA=ON -DCP2K_USE_ELPA=ON -DCP2K_USE_LIBXSMM=ON -DCP2K_USE_HDF5=ON -DCP2K_USE_PLUMED=ON
  2. -- Checking for module 'mpi-c'
  3. --   Package 'mpi-c', required by 'virtual:world', not found
  4. -- Could NOT find MPI_C (missing: MPI_C_LIB_NAMES MPI_C_HEADER_DIR MPI_C_WORKS)
  5. -- Checking for module 'mpi-cxx'
  6. --   Package 'mpi-cxx', required by 'virtual:world', not found
  7. -- Could NOT find MPI_CXX (missing: MPI_CXX_LIB_NAMES MPI_CXX_HEADER_DIR MPI_CXX_WORKS)
  8. -- Checking for module 'mpi-fort'
  9. --   Package 'mpi-fort', required by 'virtual:world', not found
  10. -- Could NOT find MPI_Fortran (missing: MPI_Fortran_LIB_NAMES MPI_Fortran_F77_HEADER_DIR MPI_Fortran_MODULE_DIR MPI_Fortran_WORKS)
  11. CMake Error at /usr/share/cmake/Modules/FindPackageHandleStandardArgs.cmake:230 (message):
  12.   Could NOT find MPI (missing: MPI_C_FOUND MPI_CXX_FOUND MPI_Fortran_FOUND C
  13.   CXX Fortran)
  14. Call Stack (most recent call first):
  15.   /usr/share/cmake/Modules/FindPackageHandleStandardArgs.cmake:600 (_FPHSA_FAILURE_MESSAGE)
  16.   /usr/share/cmake/Modules/FindMPI.cmake:1837 (find_package_handle_standard_args)
  17.   CMakeLists.txt:409 (find_package)

  18. -- Configuring incomplete, errors occurred!
复制代码

你好,运行构建指令的时候出现如上报错,请问怎么解决,cmake是直接dnf install装的,toolchain按照sob老师博文安装的,谢谢

76

帖子

0

威望

416

eV
积分
492

Level 3 能力者

3#
 楼主 Author| 发表于 Post on 2026-1-7 22:37:30 | 只看该作者 Only view this author
m1racle 发表于 2026-1-7 22:31
你好,运行构建指令的时候出现如上报错,请问怎么解决,cmake是直接dnf install装的,toolchain按照sob老 ...

没检查到MPI。source那一步做了没有

9

帖子

0

威望

61

eV
积分
70

Level 2 能力者

4#
发表于 Post on 2026-1-7 22:59:39 | 只看该作者 Only view this author
做了,但是之后我发现没装cmake,我退出去装cmake了,估计是还要在执行一遍这个命令,我试试

9

帖子

0

威望

61

eV
积分
70

Level 2 能力者

5#
发表于 Post on 2026-1-7 23:02:45 | 只看该作者 Only view this author
UW_0728. 发表于 2026-1-7 22:37
没检查到MPI。source那一步做了没有
  1. -- Checking for one of the modules 'elpa_openmp'
  2. -- Found Elpa: /root/cp2k-2026.1/tools/toolchain/install/elpa-2024.05.001/cpu/lib/libelpa_openmp.so;/root/cp2k-2026.1/tools/toolchain/install/scalapack-2.2.2/lib/libscalapack.a;:libopenblas.a
  3. CMake Error at tools/toolchain/install/cmake-3.31.7/share/cmake-3.31/Modules/FindPackageHandleStandardArgs.cmake:233 (message):
  4.   Could NOT find HDF5 (missing: HDF5_LIBRARIES HDF5_INCLUDE_DIRS C Fortran)
  5. Call Stack (most recent call first):
  6.   tools/toolchain/install/cmake-3.31.7/share/cmake-3.31/Modules/FindPackageHandleStandardArgs.cmake:603 (_FPHSA_FAILURE_MESSAGE)
  7.   tools/toolchain/install/cmake-3.31.7/share/cmake-3.31/Modules/FindHDF5.cmake:1027 (find_package_handle_standard_args)
  8.   CMakeLists.txt:657 (find_package)
复制代码

这次每检查到HDF5

76

帖子

0

威望

416

eV
积分
492

Level 3 能力者

6#
 楼主 Author| 发表于 Post on 2026-1-7 23:08:50 | 只看该作者 Only view this author
本帖最后由 UW_0728. 于 2026-1-7 23:19 编辑
m1racle 发表于 2026-1-7 23:02
这次每检查到HDF5


我看了下2026.1的toolchain脚本,发现默认选项为with_hdf5="__DONTUSE__",即默认不安装HDF5。把cmake里面-DCP2K_USE_HDF5=ON去掉吧(最好先清空build文件夹)

CP2K这个默认选项与help信息里提示的竟然不一致,这是我没想到的。。

9

帖子

0

威望

61

eV
积分
70

Level 2 能力者

7#
发表于 Post on 2026-1-7 23:12:15 | 只看该作者 Only view this author
UW_0728. 发表于 2026-1-7 23:08
我看了下2026.1的toolchain脚本,发现默认选项为with_hdf5="__DONTUSE__",即默认不安装HDF5。把cmake里 ...

ok,我来试一下,谢谢你

9

帖子

0

威望

61

eV
积分
70

Level 2 能力者

8#
发表于 Post on 2026-1-7 23:30:28 | 只看该作者 Only view this author
UW_0728. 发表于 2026-1-7 23:08
我看了下2026.1的toolchain脚本,发现默认选项为with_hdf5="__DONTUSE__",即默认不安装HDF5。把cmake ...

1,是这个问题,现在编译成功了
2,你的环境配置,第一行少了个斜杠/
谢谢大佬

76

帖子

0

威望

416

eV
积分
492

Level 3 能力者

9#
 楼主 Author| 发表于 Post on 2026-1-8 00:56:40 | 只看该作者 Only view this author
m1racle 发表于 2026-1-7 23:30
1,是这个问题,现在编译成功了
2,你的环境配置,第一行少了个斜杠/
谢谢大佬

抱歉,没懂第二点的意思

9

帖子

0

威望

61

eV
积分
70

Level 2 能力者

10#
发表于 Post on 2026-1-8 23:05:02 | 只看该作者 Only view this author
UW_0728. 发表于 2026-1-8 00:56
抱歉,没懂第二点的意思

cp2k-2026.1/bin

76

帖子

0

威望

416

eV
积分
492

Level 3 能力者

11#
 楼主 Author| 发表于 Post on 2026-1-8 23:32:18 | 只看该作者 Only view this author

感谢,已修正

9

帖子

0

威望

55

eV
积分
64

Level 2 能力者

12#
发表于 Post on 2026-1-13 15:41:00 | 只看该作者 Only view this author
把下面三行直接写入 `~/.bashrc` 会把初学者拐带坏的。再不济也应该写入 `~/env/cp2k_2026.1.env`。
```
export PATH=$PATH:/root/CP2K/src/cp2k-2026.1/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/root/CP2K/src/cp2k-2026.1/lib64
source /root/CP2K/src/cp2k-2026.1/tools/toolchain/install/setup
```
这才看到,天呐,这个人是在 root 权限下安装的。可以说很邪恶了。

13

帖子

0

威望

629

eV
积分
642

Level 4 (黑子)

13#
发表于 Post on 2026-1-16 16:45:28 | 只看该作者 Only view this author
老师您好,我的系统是ubuntu 20.04,cpu是amd,我在编译cp2k2026.1的cmake的步骤使用cmake -S .. -DCP2K_USE_EVERYTHING=ON -DCP2K_USE_DLAF=OFF -DCP2K_USE_PEXSI=OFF -DCP2K_USE_LIBSMEAGOL=OFF -DCP2K_USE_DEEPMD=OFF -DCP2K_USE_ACE=OFF -DCP2K_USE_TREXIO=OFF -DCP2K_USE_GREENX=OFF -DCP2K_USE_LIBTORCH=OFF -DCP2K_USE_MIMIC=OFF会出现这个报错-- multicharge: Find installed package
CMake Error at CMakeLists.txt:793 (find_package):
  By not providing "Findtoml-f.cmake" in CMAKE_MODULE_PATH this project has
  asked CMake to find a package configuration file provided by "toml-f", but
  CMake did not find one.

  Could not find a package configuration file provided by "toml-f" with any
  of the following names:

    toml-fConfig.cmake
    toml-f-config.cmake

  Add the installation prefix of "toml-f" to CMAKE_PREFIX_PATH or set
  "toml-f_DIR" to a directory containing one of the above files.  If "toml-f"
  provides a separate development package or SDK, be sure it has been
  installed.


-- Configuring incomplete, errors occurred!修改build命令成cmake -S .. -DCP2K_USE_DLAF=OFF -DCP2K_USE_PEXSI=OFF -DCP2K_USE_LIBSMEAGOL=OFF -DCP2K_USE_DEEPMD=OFF -DCP2K_USE_ACE=OFF -DCP2K_USE_TREXIO=OFF -DCP2K_USE_GREENX=OFF -DCP2K_USE_LIBTORCH=OFF -DCP2K_USE_MIMIC=OFF -DCP2K_DATA_DIR=/home/ljm_test/software/cp2k-2026.1/data -DCP2K_USE_SPLA=ON -DCP2K_USE_SIRIUS=ON -DCMAKE_C_COMPILER=icx -DCMAKE_CXX_COMPILER=icpx -DCMAKE_Fortran_COMPILER=ifx -DCMAKE_C_COMPILER=icx -DCMAKE_CXX_COMPILER=icpx -DCMAKE_Fortran_COMPILER=ifx -DCMAKE_INSTALL_PREFIX=/home/ljm_test/software/cp2k-2026.1/exe/可以正常运行但是在最后make install步骤会报错(.text+0x24): undefined reference to `main'
icpx: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [src/CMakeFiles/memory_utilities_unittest.dir/build.make:125: bin/memory_utilities_unittest.ssmp] Error 1
make[1]: *** [CMakeFiles/Makefile2:379: src/CMakeFiles/memory_utilities_unittest.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....
/usr/bin/ld: /lib/x86_64-linux-gnu/Scrt1.o: in function `_start':
(.text+0x24): undefined reference to `main'
/usr/bin/ld: /lib/x86_64-linux-gnu/Scrt1.o: in function `_start':
(.text+0x24): undefined reference to `main'
icpx: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [src/CMakeFiles/gx_ac_unittest.dir/build.make:125: bin/gx_ac_unittest.ssmp] Error 1
make[1]: *** [CMakeFiles/Makefile2:667: src/CMakeFiles/gx_ac_unittest.dir/all] Error 2
icpx: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [src/CMakeFiles/gemm_square_unittest.dir/build.make:125: bin/gemm_square_unittest.ssmp] Error 1
make[1]: *** [CMakeFiles/Makefile2:347: src/CMakeFiles/gemm_square_unittest.dir/all] Error 2
[ 98%] Built target libcp2k_unittest
/usr/bin/ld: /lib/x86_64-linux-gnu/Scrt1.o: in function `_start':
(.text+0x24): undefined reference to `main'
icpx: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [src/CMakeFiles/nequip_unittest.dir/build.make:125: bin/nequip_unittest.ssmp] Error 1
make[1]: *** [CMakeFiles/Makefile2:571: src/CMakeFiles/nequip_unittest.dir/all] Error 2
/usr/bin/ld: /lib/x86_64-linux-gnu/Scrt1.o: in function `_start':
(.text+0x24): undefined reference to `main'
icpx: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [src/CMakeFiles/parallel_rng_types_unittest.dir/build.make:125: bin/parallel_rng_types_unittest.ssmp] Error 1
make[1]: *** [CMakeFiles/Makefile2:411: src/CMakeFiles/parallel_rng_types_unittest.dir/all] Error 2
/usr/bin/ld: /lib/x86_64-linux-gnu/Scrt1.o: in function `_start':
(.text+0x24): undefined reference to `main'
icpx: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [src/CMakeFiles/dbt_tas_unittest.dir/build.make:125: bin/dbt_tas_unittest.ssmp] Error 1
make[1]: *** [CMakeFiles/Makefile2:635: src/CMakeFiles/dbt_tas_unittest.dir/all] Error 2
[ 98%] Linking CXX executable ../bin/cp2k.ssmp
icpx: warning: use of '-qopenmp' recommended over '-fopenmp' [-Wrecommended-option]
[ 99%] Linking CXX executable ../bin/xyz2dcd.ssmp
[ 99%] Linking CXX executable ../bin/graph.ssmp
icpx: warning: use of '-qopenmp' recommended over '-fopenmp' [-Wrecommended-option]
icpx: warning: use of '-qopenmp' recommended over '-fopenmp' [-Wrecommended-option]
/usr/bin/ld: /lib/x86_64-linux-gnu/Scrt1.o: in function `_start':
(.text+0x24): undefined reference to `main'
icpx: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [src/CMakeFiles/cp2k-bin.dir/build.make:125: bin/cp2k.ssmp] Error 1
make[1]: *** [CMakeFiles/Makefile2:315: src/CMakeFiles/cp2k-bin.dir/all] Error 2
[ 99%] Linking CXX executable ../bin/dumpdcd.ssmp
icpx: warning: use of '-qopenmp' recommended over '-fopenmp' [-Wrecommended-option]
/usr/bin/ld: /lib/x86_64-linux-gnu/Scrt1.o: in function `_start':
(.text+0x24): undefined reference to `main'
icpx: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [src/CMakeFiles/graph.dir/build.make:125: bin/graph.ssmp] Error 1
make[1]: *** [CMakeFiles/Makefile2:443: src/CMakeFiles/graph.dir/all] Error 2
/usr/bin/ld: /lib/x86_64-linux-gnu/Scrt1.o: in function `_start':
(.text+0x24): undefined reference to `main'
icpx: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [src/CMakeFiles/xyz2dcd.dir/build.make:125: bin/xyz2dcd.ssmp] Error 1
make[1]: *** [CMakeFiles/Makefile2:507: src/CMakeFiles/xyz2dcd.dir/all] Error 2
/usr/bin/ld: /lib/x86_64-linux-gnu/Scrt1.o: in function `_start':
(.text+0x24): undefined reference to `main'
icpx: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [src/CMakeFiles/dumpdcd.dir/build.make:125: bin/dumpdcd.ssmp] Error 1
make[1]: *** [CMakeFiles/Makefile2:475: src/CMakeFiles/dumpdcd.dir/all] Error 2
[100%] Linking CXX executable ../bin/dbt_unittest.ssmp
icpx: warning: use of '-qopenmp' recommended over '-fopenmp' [-Wrecommended-option]
/usr/bin/ld: /lib/x86_64-linux-gnu/Scrt1.o: in function `_start':
(.text+0x24): undefined reference to `main'
icpx: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [src/CMakeFiles/dbt_unittest.dir/build.make:125: bin/dbt_unittest.ssmp] Error 1
make[1]: *** [CMakeFiles/Makefile2:603: src/CMakeFiles/dbt_unittest.dir/all] Error 2
make: *** [Makefile:136: all] Error 2
请问老师知道如何解决吗,谢谢了

76

帖子

0

威望

416

eV
积分
492

Level 3 能力者

14#
 楼主 Author| 发表于 Post on 2026-1-16 19:13:36 | 只看该作者 Only view this author
本帖最后由 UW_0728. 于 2026-1-17 02:33 编辑

1. 检查一下tblite有没有正确安装,没装tblite的话第一个命令加上-DCP2K_USE_TBLITE=OFF试试看(这个问题其实查CMakeLists.txt就知道问题所在了)(顺带一提,个人不是很推崇在-DCP2K_USE_EVERYTHING=ON基础上加-DCP2K_USE_xxx=OFF的做法,因为CP2K未来支持或需要库和依赖可能会越来越多,这样做很容易导致漏掉某个未安装的依赖从而cmake阶段报错;我认为还是根据自己toolchain中装/找的依赖手动加-DCP2K_USE_xxx=ON最为稳妥)
2. toolchain编译时用的什么编译器,make install时就用什么编译器,绝对不要混用;更何况CP2K目前对新的oneAPI的支持(尤其是ifx)不完善

P.S. 你的第二步指令没有-DCP2K_USE_EVERYTHING=ON,所以加那么一堆-DCP2K_USE_xxx=OFF没意义,而-DCP2K_USE_xxx=ON也没加几个,相当于编译时没利用上toolchain里装的大部分依赖。

46

帖子

0

威望

1562

eV
积分
1608

Level 5 (御坂)

15#
发表于 Post on 7 day ago | 只看该作者 Only view this author
3. 运行构建指令的时候出错,倒腾了半天还没解决,求帮助:CMake Error at CMakeLists.txt:768 (find_package):
  By not providing "Finddftd4.cmake" in CMAKE_MODULE_PATH this project has
  asked CMake to find a package configuration file provided by "dftd4", but
  CMake did not find one.

  Could not find a package configuration file provided by "dftd4" with any of
  the following names:

    dftd4Config.cmake
    dftd4-config.cmake

  Add the installation prefix of "dftd4" to CMAKE_PREFIX_PATH or set
  "dftd4_DIR" to a directory containing one of the above files.  If "dftd4"
  provides a separate development package or SDK, be sure it has been
  installed.

本版积分规则 Credits rule

手机版 Mobile version|北京科音自然科学研究中心 Beijing Kein Research Center for Natural Sciences|京公网安备 11010502035419号|计算化学公社 — 北京科音旗下高水平计算化学交流论坛 ( 京ICP备14038949号-1 )|网站地图

GMT+8, 2026-1-24 07:44 , Processed in 0.191837 second(s), 22 queries , Gzip On.

快速回复 返回顶部 返回列表 Return to list