LINUX.ORG.RU

Не видит стандартных заголовоков.

 ,


0

1

День добрый.

Пробую company-mode (из ELPA) для emacs. Отлично видит все локальные структуры и их поля, как для C, так и для C++, может запросто найти описание структуры в заголовках, которые валяются рядом.

Но вот всё, что хранится в стандартных файлах (как то <vector>, <string>, <sys/socket.h>) упорно не хочет видеть.

периодически кидается сообщениями

clang failed with error 1:
/usr/bin/clang -cc1 -fsyntax-only -code-completion-macros -x c++ -code-completion-at -:8:5 -

<stdin>:1:10: fatal error: 'iostream' file not found
#include <iostream>
         ^
1 error generated.

добавление параметров -I тоже не помогает.

Это вообще возможно, чтоб clang в этом случае видел стандартные инклуды?

сам clang, как и clang++ замечательно всё компилят.


Возможно, поможет:

(defun c-get-system-includes ()
  (with-temp-buffer
    (shell-command 
     "echo | cpp -x c++ -Wp,-v 2>&1 | grep '^ .*include' | sed 's/^ //g'" 
     (current-buffer))
    (split-string (buffer-string) "\n" t)))

(with-eval-after-load "company-clang"
  (setq company-clang-arguments
        (mapcar #'(lambda (item)(concat "-I" item))
                (c-get-system-includes))))
Bad_ptr ★★★★★
()
Последнее исправление: Bad_ptr (всего исправлений: 1)
Ответ на: Возможно, поможет: от Bad_ptr

увы :(

clang failed with error 1:
/usr/bin/clang -cc1 -fsyntax-only -code-completion-macros -x c++ -I/usr/include/c++/4.8 -I/usr/i\
nclude/x86_64-linux-gnu/c++/4.8 -I/usr/include/c++/4.8/backward -I/usr/lib/gcc/x86_64-linux-gnu/\
4.8/include -I/usr/local/include -I/usr/lib/gcc/x86_64-linux-gnu/4.8/include-fixed -I/usr/includ\
e/x86_64-linux-gnu -I/usr/include -code-completion-at -:7:8 -

<stdin>:1:10: fatal error: 'iostream' file not found
#include <iostream>
         ^
1 error generated.

villu
() автор топика
Ответ на: комментарий от villu

Кстати, если сделать просто вот так

$ clang -cc1 -fsyntax-only -code-completion-macros -x c++ -I/usr/include/c++/4.8 -I/usr/include/x86_64-linux-gnu/c++/4.8 -I/usr/include/c++/4.8/backward -I/usr/lib/gcc/x86_64-linux-gnu/4.8/include -I/usr/local/include -I/usr/lib/gcc/x86_64-linux-gnu/4.8/include-fixed -I/usr/include/x86_64-linux-gnu -I/usr/include test.cpp

то ошибок нет. Видимо, проблема в company-mode, либо я чего-то не понимаю

villu
() автор топика
Ответ на: комментарий от proofit404

Это если добавить пути

("-cc1" "-fsyntax-only" "-code-completion-macros" "-x" "c++" "-I/usr/include/c++/4.8 -I/usr/incl\
ude/x86_64-linux-gnu/c++/4.8 -I/usr/include/c++/4.8/backward -I/usr/lib/gcc/x86_64-linux-gnu/4.8\
/include -I/usr/local/include -I/usr/lib/gcc/x86_64-linux-gnu/4.8/include-fixed -I/usr/include/x\
86_64-linux-gnu -I/usr/include" "-code-completion-at" "-:1:1" "-")

Так, если нет

("-cc1" "-fsyntax-only" "-code-completion-macros" "-x" "c++" "-code-completion-at" "-:1:1" "-")

villu
() автор топика
Ответ на: комментарий от proofit404

Не понял вопроса.

Если в терминале, то ждет ввода тела кода.

Если скормить файл так "-code-completion-at test.cpp:1:1 test.cpp"

то выдает это http://pastebin.com/GH9JNuv0

Если заменить так "-code-completion-at test.cpp:7:8 test.cpp" где в позиции 7:8 std::ve то выдаст http://pastebin.com/XneQBDCh

cmake в данном случае работает, как надо. Я просто с emacs очень давно дел не имел, уже не помню всего. Думал может упускаю чего. Может оно там с каким chroot исполняется....

villu
() автор топика

Ответ от майнтайнера company-mode

Dmitry Gutov: дополнение из iosteam работает с таким вот значением company-clang-arguments:

'("-I/usr/include/x86_64-linux-gnu/c++/4.8/"
  "-I/usr/include/c++/4.8/"
  "-I/usr/include/"
  "-I/usr/include/x86_64-linux-gnu"
  "-I/usr/lib/llvm-3.2/lib/clang/3.2/include/")
proofit404
()
Ответ на: комментарий от proofit404

Всё, разобрался. Сам дурак оказалось. Ответ сразу был дан, просто with-eval-after-load не нашелся в emacs24 (linux Mint) Ну и в результате написал свой код(вспомнить, как это делается), который все вывернул в строку вместо списка и применил в eval-after-load. Сейчас только дошло, что один элемент списка, как 1 параметр передается.

Всем спасибо, вопрос закрыт :)

villu
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.