Добавить недостающие включения без путиC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Добавить недостающие включения без пути

Сообщение Anonymous »

Я использую clangd с VSCode. Clangd предлагает возможность добавлять недостающие включения. При этом он (иногда? не мог понять когда) автоматически добавляет относительный или абсолютный путь к директиве include.
Последнее вызывает проблемы при компиляции на разных ОС (в моем случае Linux и Termux (на моем мобильном телефоне)) поскольку абсолютные (системные) пути явно разные.
Например, вместо

Код: Выделить всё

#include "Header.h"
он ​​добавит

Код: Выделить всё

#include "/home/user/path/to/the/Header.h"
Конечно, я могу вручную удалить путь, но мне интересно:
Кто-нибудь знает, есть ли возможность отключить это поведение и заставить его опустить путь?
Я пытался поискать в Google, но, к сожалению, ничего не нашел...
Заранее спасибо
Изменить: минимальный пример
Структура:

Код: Выделить всё

./
- .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) под подзаголовком отображается синяя волнистая линия, намекая, что соответствующий заголовок отсутствует/не включен напрямую (но известен через Header.h).
При выборе опции QuickFix добавляется директива include следующим образом:

Код: Выделить всё

#include "/path/to/working/directory/include/Subheader.h"


Подробнее здесь: https://stackoverflow.com/questions/788 ... thout-path
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»