Модули Vim и Environment: компиляция через :make не знает boost

Мой проект C++ использует CMake для создания make-файлов для компиляции и внешних библиотек из увеличение. Я предпочитаю редактор vim. Запуск $ make в командной строке работает, но :make в vim имеет проблемы на этапе компоновки и возвращает:

/usr/bin/ld: cannot find -lboost_system    

Однако я также использую :make install для размещения своего проекта в $HOME/usr/stow/<prog>, где я тестирую и использую программу. Поэтому я ищу решение, чтобы сделать этап связывания успешным.

Дальнейшие подробности:

Он находится в сборке вне источника реж. Поэтому я настроил makeprg

:set makeprg=make\ -C\ ../build/Release/

Более поздняя версия Boost устанавливается и становится доступной в системе через Проект модулей среды, на который я полагаюсь в мой проект. Более новую версию boost можно загрузить через

$ module load boost

Я добавил эту строку в свой $HOME/.profile, чтобы мне не приходилось вызывать ее каждый раз при компиляции.

Я проверил вопрос (G)VIM использует другой $PATH чем моя система, обсуждающая переменные среды, используемые в vim.

ОБНОВЛЕНИЕ: проблема возникла только при запуске gvim из оконного менеджера (gnome2), а не при запуске (g)vim из командной строки/bash.


person Hotschke    schedule 01.02.2013    source источник


Ответы (1)


Если это работает в командной строке, но не в vim, посмотрите, что отличается в вашей среде.

:!env | sort > env-vim

тогда

$ env | sort | diff env-vim -

Вероятно, что-то устанавливает LD_LIBRARY_PATH для включения нестандартного каталога для ваших библиотек повышения, и это не отображается в среде подоболочки vim. Возможно, вы запускаете vim из значка на рабочем столе, а не из командной строки? (vim / :make из командной строки было бы интересным тестом, если это так).

Чтобы получить переменную в подоболочке vim, добавьте ее в ~/.vimrc

let $LD_LIBRARY_PATH="*your library path*"  

Я бы прокомментировал, а не ответил, но я еще не заработал эту способность. Поскольку об этом спросили вчера, я попробовал.

person JohnQ    schedule 02.02.2013
comment
спасибо за Ваш ответ. Это было действительно полезно. Теперь я мог понять это. На самом деле это был только gvim с проблемами связывания, а не vim в командной строке. На самом деле мне пришлось установить переменную env $LIBRARY_PATH: let $LIBRARY_PATH="/apps/boost/1_50_0/lib/:".$LIBRARY_PATH. - person Hotschke; 04.02.2013
comment
Дополнительную информацию для тех, у кого есть похожая проблема, см. на следующих веб-сайтах: vim.wikia.com/EnvVar , ld-library-path-vs-library-path и Re: gvim - среда/bashrc не загружена - person Hotschke; 04.02.2013
comment
Рад, что это сработало для вас. Спасибо за добавление указателя на разницу между LD_LIBRARY_PATH и LIBRARY_PATH. - person JohnQ; 05.02.2013