CMake指定gcc-8编译AmberTools仍默认用gcc-5报错求助
解决Ubuntu 16.04编译AmberTools时CMake强制使用默认gcc5的问题
问题背景
在Ubuntu 16.04.7 LTS上编译AmberTools 22,系统默认gcc/g版本为5.4.0,但AmberTools要求最低gcc-6。已安装gcc-8和g-8,通过CMAKE_C_COMPILER和CMAKE_CXX_COMPILER指定路径执行CMake命令:
cmake $AMBER_PREFIX/amber22_src \ -DCMAKE_INSTALL_PREFIX=$AMBER_PREFIX/amber22 \ -DCOMPILER=GNU \ -DMPI=FALSE -DCUDA=TRUE -DINSTALL_TESTS=TRUE \ -DDOWNLOAD_MINICONDA=TRUE \ -DCMAKE_C_COMPILER=/usr/bin/gcc-8 -DCMAKE_CXX_COMPILER=/usr/bin/g++-8 \
但CMake仍识别到C/C++/Fortran编译器为GNU 5.4.0,并抛出错误:
Error: Amber requires at least g++-6.0
从错误日志可见,CMake实际调用的是系统默认的/usr/bin/gcc、/usr/bin/g++和/usr/bin/gfortran,而非指定的gcc-8版本。
问题根源
- CMake缓存残留:之前执行过的CMake配置会在build目录生成缓存文件,保存了默认编译器路径,导致新指定的参数未生效,日志中也明确提示"You have changed variables that require your cache to be deleted"。
- Fortran编译器未指定:仅指定了C/C编译器,但AmberTools依赖Fortran编译,系统默认gfortran仍为5.4.0,CMake会自动关联使用同版本的C/C编译器。
COMPILER=GNU参数冲突:该参数会强制CMake调用系统默认的GNU编译器套件,覆盖手动指定的编译器路径。
解决方案
1. 清理CMake缓存
彻底删除原build目录,重建干净的编译环境:
rm -rf /media/gpu-1/GPU_1_2TB/Ambertools22/amber22_src/build mkdir -p /media/gpu-1/GPU_1_2TB/Ambertools22/amber22_src/build cd /media/gpu-1/GPU_1_2TB/Ambertools22/amber22_src/build
2. 安装对应版本的Fortran编译器
AmberTools依赖Fortran,需安装与gcc-8配套的gfortran-8:
sudo apt update && sudo apt install gfortran-8
3. 重新执行CMake配置
移除COMPILER=GNU参数,同时完整指定C、C++、Fortran三个编译器的路径:
cmake $AMBER_PREFIX/amber22_src \ -DCMAKE_INSTALL_PREFIX=$AMBER_PREFIX/amber22 \ -DMPI=FALSE -DCUDA=TRUE -DINSTALL_TESTS=TRUE \ -DCMAKE_C_COMPILER=/usr/bin/gcc-8 \ -DCMAKE_CXX_COMPILER=/usr/bin/g++-8 \ -DCMAKE_Fortran_COMPILER=/usr/bin/gfortran-8
4. 验证与编译
配置成功后,CMake日志应显示编译器版本为8.x系列:
The C compiler identification is GNU 8.x.x
The CXX compiler identification is GNU 8.x.x
The Fortran compiler identification is GNU 8.x.x
之后执行编译安装:
make install source $AMBER_PREFIX/amber22/amber.sh
内容的提问来源于stack exchange,提问作者AKA
相关产品推荐
相关产品推荐

