首页 > 解决方案 > CMake 跳过标准的预编译头文件

问题描述

我是 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)

克莱恩说我execution找不到标题,但我可以在lib/文件夹中找到它 有人能告诉我我做错了什么吗
截屏

标签: c++cmake

解决方案


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

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

推荐阅读