为何set(CMAKE_CXX_STANDARD 14)在Linux下未自动链接stdc++?
关于CMake链接stdc++的问题解答
问题1:set(CMAKE_CXX_STANDARD 14)的职责是否包含自动链接stdc++?为何必须添加而原版无需添加?
set(CMAKE_CXX_STANDARD 14)仅负责指定编译时遵循的C++标准版本,不包含自动链接C++标准库(如stdc++)的职责。- 你需要手动添加
stdc++才能解决链接错误,大概率是自定义CMakeLists存在以下情况:- 目标被错误识别为C项目:比如源文件后缀为
.c,或手动指定了CMAKE_C_COMPILER,CMake仅会为C++目标自动触发标准库链接逻辑; - 覆盖了CMake默认链接规则:比如手动修改
CMAKE_EXE_LINKER_FLAGS等变量,清除了默认的标准库链接配置; - 目标类型配置异常:未正确使用
add_executable/add_library创建C++目标,导致CMake未触发自动链接逻辑。
- 目标被错误识别为C项目:比如源文件后缀为
问题2:原版CMakeLists.txt未显式指定stdc++,是如何完成标准库链接的?
CMake针对C目标有默认链接逻辑:当通过add_executable或add_library创建目标时,只要CMake识别出这是C项目(比如源文件为.cpp/.cxx等后缀,或显式设置CMAKE_CXX_COMPILER),就会自动为目标添加标准库链接规则——在gcc环境下就是自动链接stdc++,无需手动在target_link_libraries中声明。
内容的提问来源于stack exchange,提问作者shashashamti2008
相关产品推荐
相关产品推荐

