Clang и стандартные заголовки - где он их берёт?
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 22.01.22 21:51
Оценка:
Здравствуйте!

Пишу свою утилиту с использованием CLang Tooling'а.

На одной машине — всё ока. При этом установлены MSVC2017/2019, при этом в системе есть переменные VS15CMNTOOLS/VS16CMNTOOLS.

На другой машине тулинг не может найти стандартные заголовки. MSVC2017/2019 — точно так же установлены. И системных переменных VS15CMNTOOLS/VS16CMNTOOLS нет. Немного поковырял этот вопрос — в инетах пишут, что установщики MSVC2017/2019 не устанавливают эти переменные. Но откуда они на первой машине? Руками я точно ничего не устанавливал.

Хорошо. Вставил в compile_flags.txt ключик '-v' — оно мне показало пути инклудов на машине, где всё работает:
  Скрытый текст

...
D:\Qt\5.15.2\msvc2019\include
D:\Qt\5.15.2\msvc2019\include\QtCore
D:\Qt\5.15.2\msvc2019\include\QtWidgets
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\atlmfc\include
C:\Program Files (x86)\Windows Kits\10\Include\10.0.19041.0\ucrt
C:\Program Files (x86)\Windows Kits\10\Include\10.0.19041.0\shared
C:\Program Files (x86)\Windows Kits\10\Include\10.0.19041.0\um
C:\Program Files (x86)\Windows Kits\10\Include\10.0.19041.0\winrt


Добавил аналогичные пути на второй машине в compile_flags.txt:

  Скрытый текст

...
D:\Qt\5.15.2\msvc2019\include
D:\Qt\5.15.2\msvc2019\include\QtCore
D:\Qt\5.15.2\msvc2019\include\QtWidgets
E:\_github\invest-openapi-cpp-qt5-client-sdk\zulibs
E:\Program Files (x86)\Microsoft Visual Studio\2019\VC\Tools\MSVC\14.29.30133\include
 E:\Program Files (x86)\Microsoft Visual Studio\2019\VC\Tools\MSVC\14.29.30133\atlmfc\include
 C:\Program Files (x86)\Windows Kits\10\Include\10.0.19041.0\ucrt
 C:\Program Files (x86)\Windows Kits\10\Include\10.0.19041.0\shared
 C:\Program Files (x86)\Windows Kits\10\Include\10.0.19041.0\um
 C:\Program Files (x86)\Windows Kits\10\Include\10.0.19041.0\winrt
End of search list.
In file included from
E:\projects\test\compile_flags_0.cpp:1:
E:\projects\test\_libs\test.h:7:10: fatal error: 'string' file not found
#include <string>
         ^~~~~~~~


Почему он найти не может? Пути к стандартным хидерам те же, вижуалка этот проект собирает нормально


Хорошо. Попробовал подсунуть пути от вижуалки 2017. Теперь всё находит, на инклуды не ругается, но не понимает, что такое std::vector
  Скрытый текст

...
D:\Qt\5.14.2\msvc2017\include
D:\Qt\5.14.2\msvc2017\include\QtCore
D:\Qt\5.14.2\msvc2017\include\QtWidgets
E:\_github\invest-openapi-cpp-qt5-client-sdk\zulibs
E:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\include
 E:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\atlmfc\include
 C:\Program Files (x86)\Windows Kits\10\Include\10.0.19041.0\ucrt
 C:\Program Files (x86)\Windows Kits\10\Include\10.0.19041.0\shared
 C:\Program Files (x86)\Windows Kits\10\Include\10.0.19041.0\um
 C:\Program Files (x86)\Windows Kits\10\Include\10.0.19041.0\winrt
End of search list.
In file included from
E:\projects\test\compile_flags_0.cpp:1:
E:\projects\test\_libs\test.h:497:13:
error: no template named 'vector' in namespace 'std'
inline std::vector< std::basic_string< CharT, Traits, Allocator > >
       ~~~~~^


В упор не пойму, что ему ещё надо для работы?


Ещё заметил, что он пытается добавить в пути поиска путь относительно экзешника моей тулзы:

ignoring nonexistent directory "f:\my-tool\lib\clang\13.0.1\include"


Есть сорцы CLang'а, есть само-собранный CLang. Что оттуда надо положить в "f:\my-tool\lib\clang\13.0.1\include", чтобы моя тулза нормально заработала?
Маньяк Робокряк колесит по городу
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.