使用CMake构建项目时引入<filesystem>头文件遇编译错误求助
解决MinGW编译C++17项目找不到头文件的问题
针对你遇到的问题,以下是几个可行的排查和解决步骤:
1. 确认MinGW版本与组件完整性
- 确保你安装的是MinGW-w64而非旧版MinGW(旧版MinGW对C17标准库支持不完善)。推荐使用posix线程模型的MinGW-w64版本,win32线程模型在部分C17特性支持上存在缺陷。
- 若通过包管理器(如MSYS2)安装,可执行命令更新完整的GCC套件:
pacman -Syu mingw-w64-x86_64-gcc
2. 修正CMake的C++标准配置
仅设置CMAKE_CXX_STANDARD 17可能无法让CMake严格应用C++17标准,补充以下配置:
cmake_minimum_required(VERSION 3.26.0) project(anamorph_movie) # 严格启用C++17标准,禁用GNU扩展 set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) # include the vcg library include_directories(./lib/vcglib-main/) # include the eigen library include_directories(./lib/vcglib-main/eigenlib) # Add your executable and source files here add_executable(${PROJECT_NAME} anamorph_video_commandline.cpp) # GCC 8及以后版本中,filesystem已集成到libstdc++,无需单独链接stdc++fs if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "8.0") target_link_libraries(${PROJECT_NAME} stdc++fs) endif()
3. 适配旧版MinGW的头文件访问
如果你使用的是GCC 7.x及以下版本的MinGW-w64,需通过<experimental/filesystem>访问,并添加预定义宏:
- 在CMake中添加编译定义:
target_compile_definitions(${PROJECT_NAME} PRIVATE _GLIBCXX_EXPERIMENTAL) - 代码中调整头文件包含:
#include <experimental/filesystem> namespace fs = std::experimental::filesystem;
4. 验证CMake生成的编译参数
打开CMake生成的Makefile,检查CXXFLAGS中是否包含-std=c++17或-std=gnu++17。若没有,删除build目录清空缓存后重新生成项目。
内容的提问来源于stack exchange,提问作者Cosmo
相关产品推荐
相关产品推荐

