MacBook M1编译ANA失败:C++版本适配及CMake配置求助
编译ANA程序的C++版本相关问题解答
1. 编译失败是否与C++版本有关?
当前编译失败的直接触发点是链接阶段找不到GMP库,这和C版本没有直接关联。但你看到的C17中allocate相关弃用警告,说明项目代码依赖了C17已弃用的C标准库特性,这些警告本身不会导致编译失败,但如果项目代码中存在依赖旧版C标准库行为的逻辑,后续可能引发运行时问题。不过就当前的链接错误而言,C版本不是导致安装失败的原因。
2. 如何让CMake/Make指定特定C++版本编译?
要让CMake生效指定的C++版本,不能仅在make命令中传参数,需要通过CMake的配置参数或修改项目CMakeLists.txt实现,以下是几种可靠方法:
方法1:CMake命令行指定(无需修改项目文件)
在执行cmake初始化构建目录时,通过CMAKE_CXX_STANDARD等参数指定版本,例如指定C++14:
cmake -S . -B build -DCMAKE_CXX_STANDARD=14 -DCMAKE_CXX_STANDARD_REQUIRED=ON -DCMAKE_CXX_EXTENSIONS=OFF
-DCMAKE_CXX_STANDARD=14:指定C++14标准-DCMAKE_CXX_STANDARD_REQUIRED=ON:强制要求编译器支持指定的C++版本,不兼容则报错-DCMAKE_CXX_EXTENSIONS=OFF:禁用编译器扩展(比如GNU扩展),严格遵循标准
方法2:修改项目的CMakeLists.txt
如果命令行参数被项目自身的CMake配置覆盖,可以直接修改项目根目录的CMakeLists.txt,在project指令之后添加:
set(CMAKE_CXX_STANDARD 14) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF)
修改后重新执行cmake初始化和make编译即可。
注意事项
- 不要直接在
make命令中传递-std=c++14,因为CMake生成的Makefile会覆盖这类手动传入的编译参数,导致不生效。 - Apple Clang 15.0.0完全兼容C++14,无需担心版本支持问题。
内容的提问来源于stack exchange,提问作者isolated matrix
相关产品推荐
相关产品推荐

