c++ - 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)
解决方案
以下是我在调试类似问题时尝试过的一些事情:
- 如果有疑问,请删除并重新创建您的构建目录。CMake 缓存某些变量,有时会进入奇怪的状态。一个新的目录将消除任何不确定性。
- CMake 应该打印出它正在使用的编译器 - 检查并确保它是正确的。例如,它可能会查找没有该标头的旧版本。
- 在这种情况下,解决方法可能是把你想要的编译器放在你的前面
PATH
,或者强制 CMake 通过CMAKE_CXX_COMPILER
.
- 在这种情况下,解决方法可能是把你想要的编译器放在你的前面
- 以详细模式构建 - 您应该能够看到正在使用的包含路径 (
-I
,-isystem
)。确保该目录在那里。- 或者,您可以通过设置转储
compile_commands.json
应包含相同信息的文件CMAKE_EXPORT_COMPILE_COMMANDS=true
- 尝试使用这些构建命令之一在 Cygwin shell 中构建单个对象。如果它有效,则可能表明您的 CLion 配置方式存在问题。
- 或者,您可以通过设置转储
推荐阅读
- sql - 如何比较具有相似数据的 2 列(例如,不同的顺序,用逗号)
- java - 如何模拟传递给构造函数的参数
- python - 使用 SWIG 将 C++ 类导出为 Python,导入模块后出现未定义符号错误
- azure - 如何:在 Azure DevOps YAML 中转义 $(var)
- java - 如何在 Intellij 的运行时类路径中包含目录
- javascript - 根据 browserslist 配置检查 JS 文件?
- python - 如何用n个字符填充字符串以使其在Python中具有一定的长度
- wordpress - 使用 Let's encrypt 设置 wordpress 时出错,Docker 上的 Nginx
- mysql - 通过与 MySQL 的多对多关系查找未在选举中投票的选民
- javascript - 关于 web 表单的问题,JavaScript 验证功能无法访问