У меня есть следующий файл foo.cpp
:
#include <vector>
struct MyClass
{
std::vector<int> v;
};
Это может быть успешно скомпилировано с помощью clang (я использую clang 3.3 в Ubuntu 13.04 32bit):
clang++ -c foo.cpp
Теперь я хочу напечатать AST:
clang++ -cc1 -ast-print foo.cpp
и у меня есть следующая ошибка
foo.cpp:1:10: fatal error: 'vector' file not found
#include <vector>
^
struct MyClass {
};
1 error generated.
Это выглядит как clang++ -cc1
не знает о системных подключаемых файлах и т. д.
Мне интересно, как настроить включает в себя для clang++ -cc1
?
Вам нужно настроить правильные пути включения.
в моей системе я добавил
-I/usr/include/i386-linux-gnu/c++/4.8 -I/usr/include/c++/4.8
на флаги компилятора. Первый был так, чтобы он мог найти
бит / C ++ config.h
Конечно, 4.8 связано с тем, что я использую компилятор, совместимый с g ++ — 4.8
Я также добавил
-std=c++11 -stdlib=libstdc++
в качестве параметров компилятора.
Надеюсь это поможет
@Джон правильный. Для потомков соответствующие части Часто задаваемые вопросы являются (с именами, подстроенными под вопрос):
clang -cc1
это внешний интерфейс,clang
это водитель. Драйвер вызывает интерфейс с параметрами, подходящими для вашей системы. Чтобы увидеть эти параметры, запустите:$ clang++ -### -c foo.cpp
Некоторые параметры командной строки clang доступны только для драйвера, а некоторые — только для внешнего интерфейса. Опции только для веб-интерфейса предназначены для использования только разработчиками Clang. Пользователи не должны запускаться
clang -cc1
напрямую, потому что-cc1
варианты не гарантируются быть стабильными.Если вы хотите использовать опцию только для внешнего интерфейса («
-cc1
вариант »), например-ast-dump
тогда вам нужно взятьclang -cc1
Строка сгенерирована драйвером и добавьте нужную вам опцию. Кроме того, вы можете запуститьclang -Xclang <option> ...
заставить водителя [пройти]<option>
вclang -cc1
,
Я сделал последнее (-Xclang
) для выдачи предварительно скомпилированных заголовков:
/usr/bin/clang++ -x c++-header foo.hpp -Xclang -emit-pch -o foo.hpp.pch <other options>
^^^^^^^
Без -Xclang
, clang++
проигнорировал -emit-pch
, Когда я пытался -cc1
У меня была та же проблема, что и у ОП — clang++
принято -emit-pch
но не было других опций, которые обычно предоставляет драйвер.