CMake 跳过标准预编译 headers

CMake skips standard precompiled headers

我是 C++ 的新手,真的很想熟悉 CMake,但总是有问题

我正在使用安装了 Cygwin 和 G++11 软件包的 CLion
我的 CMakeLists.txt 文件:

cmake_minimum_required(VERSION 3.20)
project(testing)

set(CMAKE_CXX_STANDARD 20)

if (NOT CMAKE_BUILD_TYPE)
    set(CMAKE_BUILD_TYPE Release)
endif ()

set(CMAKE_CXX_FLAGS "-Wall -Wextra")
set(CMAKE_CXX_FLAGS_DEBUG "-g")
set(CMAKE_CXX_FLAGS_RELEASE "-O3")

add_executable(testing main.cpp)

Clion 告诉我找不到 execution header,但我可以在 lib/ 文件夹中找到它

有人可以告诉我我做错了什么

以下是我在调试类似问题时尝试过的一些方法:

  1. 如有疑问,请删除并 re-create 您的构建目录。 CMake 缓存某些变量,有时会进入一种奇怪的状态。一个新的目录将消除任何不确定性。
  2. CMake 应该打印出它正在使用的编译器 - 检查并确保它是正确的。例如,它可能会找到一个没有 header 的旧版本。
    1. 在这种情况下,解决方法可能是将所需的编译器放在 PATH 的前面,或者强制 CMake 通过 CMAKE_CXX_COMPILER.
    2. 找到正确的编译器
  3. 在详细模式下构建 - 您应该能够看到正在使用的包含路径(-I-isystem)。确保该目录在那里。
    1. 或者,您可以通过设置 CMAKE_EXPORT_COMPILE_COMMANDS=true
    2. 转储应包含相同信息的 compile_commands.json 文件
    3. 尝试使用这些构建命令之一在您的 Cygwin shell 中构建一个 object。如果有效,则可能表明您的 CLion 配置存在问题。