You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 06:27:22