添加缺少的包含内容而不带路径

问题描述 投票:0回答:1

我将 clangd 与 VSCode 一起使用。 Clangd 提供了添加缺失包含的可能性。这样做时,它(有时?无法弄清楚何时)会自动将相对或绝对路径添加到 include 指令。

后者在不同操作系统(在我的例子中是 Linux 和 Termux(在我的手机上))上编译时会导致问题,因为绝对(系统)路径明显不同。

例如,而不是

#include "Header.h"

它会添加

#include "/home/user/path/to/the/Header.h"

我当然可以手动删除路径,但我想知道:

有人知道是否有可能禁用此行为并使其忽略路径? 我尝试用谷歌搜索,但不幸的是我找不到任何东西......

提前致谢

编辑:最小示例

结构:

./
- .clangd
- compile_commands.json
- bin/
- build/
- include/
--- Header.h
--- Subheader.h
- src/
--- main.cpp`

内容:

// .clangd
Diagnostics:
  UnusedIncludes: Strict
  MissingIncludes: Strict
// Subheader.h
#ifndef IG20240815185417
#define IG20240815185417

struct Subheader {
    int i{2};
};

#endif
// Header.h
#ifndef IG20240520170135
#define IG20240520170135
    
#include "Subheader.h"
    
struct Header {
  Subheader sh{};
};

#endif
// main.cpp
#include "Header.h"

int main() {
  Header h{};
  Subheader sh{};
  return 0;
}

编译命令(使用

compile_commands.json
创建):

clang++ -o build/main.o -c src/main.cpp -MJ build/main.o.json -I./include && clang++ -o bin/main.exe build/main.o && sed -e '1s/^/[\n/' -e '$s/,$/\n]/' build/*.o.json > compile_commands.json

请注意,

compile_commands.json
将通过编译命令创建。如果它在您的机器上不起作用,这里是基本编译命令和
.json
文件的最终内容。您必须调整目录以匹配您的系统!

编译命令(不创建

compile_commands.json
):

clang++ -o build/main.o -c src/main.cpp -I./include && clang++ -o bin/main.exe build/main.o
// compile_commands.json
[
{ "directory": "/ABSOLUTE/PATH/TO/WORKING/DIRECTORY", "file": "src/main.cpp", "output": "build/main.o", "arguments": ["/usr/bin/clang++", "-xc++", "src/main.cpp", "-o", "build/main.o", "--driver-mode=g++", "-c", "-I", "./include", "--target=x86_64-pc-linux-gnu"]}
]

观察:

查看

main.cpp
(在 VSCode 中)时,它会在
Subheader
下面显示一条蓝色波浪线,暗示相应的标头丢失/未直接包含(但通过
Header.h
得知)。 当选择 QuickFix 选项时,它会添加包含指令,如下所示:
#include "/path/to/working/directory/include/Subheader.h"

c++ include llvm include-path clangd
1个回答
0
投票

我遵循了

HolyBlackCat
的建议并在这里报告了一个错误。

© www.soinside.com 2019 - 2024. All rights reserved.