Ubuntu 12.04安装doxygen 1.9.2时cmake与make编译报错求助
问题根因
你当前遇到的编译报错本质是编译器对C++14标准支持不完整导致的:
- 你正在编译的doxygen 1.9.2使用了C++14的constexpr特性,允许非静态成员函数声明为constexpr
- 你系统中默认调用的clang 3.4仅支持早期draft版本的C++14规范,不支持“非字面类型的constexpr非静态成员函数”语法,所以触发编译报错
- 你虽然已经升级了gcc-6、g++-6(这两个版本完全支持C++14),但cmake配置阶段默认优先调用了clang编译器,没有使用你升级后的gcc工具链
解决方案
按优先级从高到低选择即可:
- 方案1:重新执行cmake配置,强制指定使用gcc-6、g++-6作为编译工具链,操作步骤如下:
- 进入之前的build编译目录,清空旧的cmake缓存:
cd ~/doxygen/build rm -rf ./* - 重新执行cmake,显式指定编译器路径:
cmake .. -DCMAKE_C_COMPILER=/usr/bin/gcc-6 -DCMAKE_CXX_COMPILER=/usr/bin/g++-6 - 重新执行make编译即可:
make -j$(nproc)
- 进入之前的build编译目录,清空旧的cmake缓存:
- 方案2:降低doxygen版本
如果方案1执行后仍有兼容问题,可以更换为doxygen 1.8.17及更早版本,这类版本不需要完整的C++14支持,在Ubuntu 12.04环境下编译适配性更好。 - 方案3:升级clang版本
如果必须使用clang作为编译器,可将clang升级至3.5及以上版本,该版本开始完整支持C++14的constexpr相关语法。
内容的提问来源于stack exchange,提问作者Kenny Pan
相关产品推荐
相关产品推荐

