我有一个 C++ 项目,使用 CMake、GCC 和 Arch Linux。我正在使用 GCC 并且该项目正在正确编译(在 IDE 和命令行中),但我在 Qt Creator 中遇到以下错误:
heat_transfer_explicit_scheme.cpp:1:10: In included file: 'quadmath.h' file not found
float128.hpp:54:10: error occurred here
...
heat_transfer_explicit_scheme.cpp:1:10: In included file: no member named 'value' in 'boost::multiprecision::number_category<backends::float128_backend>'
number.hpp:131:399: error occurred here
但是此标头存在于
/usr/lib/gcc/x86_64-pc-linux-gnu/14.2.1/include
中,单击 #include <quadmath.h>
将在 IDE 中打开它。
据我了解,
/usr/lib/gcc/x86_64-pc-linux-gnu/14.2.1/include
不是默认的sysroot,clangd不知道这个位置,所以我尝试添加CMAKE_SYSROOT
/usr/lib/gcc/x86_64-pc-linux-gnu/14.2.1/include
,就像在这个论坛线程上一样:Qt论坛 - Qt Creator - clang代码模型即使代码编译,也找不到类型。但它并不能让 clangd 访问 <quadmath.h>
位置。
此外,在
CMAKE_SYSROOT
中设置 CMakeLists.txt
指向其位置后,find_package
无法找到其他项目依赖项(如 boost)。
另外,我尝试将
/usr/lib/gcc/x86_64-pc-linux-gnu/14.2.1/include
添加到当前终端会话的 PATH 并从此环境中打开 Qt Creator,但似乎没有效果。
基于 Qt 6.7.2 的 Qt Creator 版本 14.0.1(GCC 14.2.1 20240805,x86_64)。
Clangd 没有使用 clang++ 编译器索引这些文件,因为他有自己的实现并且不需要 gcc 内部标头codechecker。但我在项目中使用 g++,并希望 clangd 处理索引。
这只是一个 gcc 标头,如果我是你,我会尝试使用一些预处理器来禁用 clang 上的
#include <quadmath.h>
并相应地修复代码(并将 PR 发送到上游项目?)
#if defined(__GNUC__)
#include <quadmath.h>
#endif
参考:https://github.com/gcc-mirror/gcc/blob/master/libquadmath/quadmath.h