clang -cc1 и система включает

У меня есть следующий файл 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?

9

Решение

Другие решения

Вам нужно настроить правильные пути включения.
в моей системе я добавил

-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++

в качестве параметров компилятора.
Надеюсь это поможет

8

@Джон правильный. Для потомков соответствующие части Часто задаваемые вопросы являются (с именами, подстроенными под вопрос):

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 но не было других опций, которые обычно предоставляет драйвер.

1
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector