使用CMake target_precompile_headers构建失败且无错误描述(疑似GCC问题)
MinGW-w64 GCC预编译头编译失败问题
问题概述
此问题根源是GCC的问题。
编译时出现如下错误:
mingw32-make[2]: *** [CMakeFiles\MyProject.dir\build.make:94: CMakeFiles/MyProject.dir/main.cpp.obj] Error 1
build.make第94行对应的编译命令为:
C:\PROGRA~1\mingw64\bin\G__~1.EXE $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -Winvalid-pch -include MyProjectDirectory/build/CMakeFiles/MyProject.dir/cmake_pch.hxx -MD -MT CMakeFiles/MyProject.dir/main.cpp.obj -MF CMakeFiles\MyProject.dir\main.cpp.obj.d -o CMakeFiles\MyProject.dir\main.cpp.obj -c MyProjectDirectory\main.cpp
触发条件
仅当预编译头中包含特定头文件组合时才会触发错误,已验证两种组合:
- 单独包含Vulkan SDK的
vulkan.hpp - 同时包含SDL的
SDL.h、Vulkan Bootstrapping库的VkBootstrap.h和标准库的<filesystem>
使用MinGW-w64环境下的GCC,移除上述组合中任意一个头文件,错误即可消失。
已制作仅含预编译头和空main函数的极简项目,但仍未明确问题根源,希望无需手动排查头文件内容。
极简复现示例
所有文件位于同一目录,目录下需包含Vulkan头文件所在的include/vulkan子文件夹。
CMakeLists.txt
cmake_minimum_required(VERSION 3.0.0) project(MyProject VERSION 0.1.0) add_executable(${PROJECT_NAME} main.cpp) target_include_directories(${PROJECT_NAME} PUBLIC . ) target_precompile_headers(${PROJECT_NAME} PRIVATE pch.hpp )
main.cpp
int main() { return 0; }
pch.hpp
#pragma once #include "vulkan/vulkan.hpp"
内容的提问来源于stack exchange,提问作者VV65536
相关产品推荐
相关产品推荐

