2013-10-07 2 views
1

Я использую fish shell на Fedora 19. Я пытался скомпилировать this простой пример gtkmm.Ошибка в использовании pkg-config с gcc в рыбе

Когда я пытаюсь скомпилировать его с помощью следующей команды в рыбы:

g++ sample.cc -o sample `pkg-config gtkmm-3.0 --cflags --libs` 

он показывает следующие ошибки:

g++: error: `pkg-config: No such file or directory 
g++: error: gtkmm-3.0: No such file or directory 
g++: error: unrecognized command line option ‘--cflags’ 
g++: error: unrecognized command line option ‘--libs`’ 

В то время, когда я использую Баш для того же вещь, она компилируется правильно. Это означает, что pkg-config извлекает правильные флаги.

Недавно я начал использовать рыбу, поэтому я не знаю, что там не так. Может кто-нибудь, пожалуйста, помогите мне с этим?

Кроме того, это мой первый вопрос о stackoverflow. Привет ребята.

спасибо.

+0

Попробуйте 'yum install pkgconfig'. – devnull

+0

У меня уже есть pkg-config. И код компилируется на ** bash **, но не на ** fish **. –

+0

'PATH' на' fish' кажется сломанным в этом случае. – devnull

ответ

3

Рыбная оболочка использует () для замены команд, а не для обратных сигналов, которые использует Bash. См.: The Fish tutorial. Вот почему он не работает для вас, это вряд ли будет проблемой с вашим PATH.

Я не совсем понимаю, почему, но по какой-то причине, если вы просто заменить кавычку в скобках, вы будете сталкиваться другой ошибки (где ... выводится из pkg-config):

g++: error: unrecognized command line option '... '

Вы можете обойти это, используя команду рыбы eval. Итак:

eval g++ sample.cc -o sample (pkg-config gtkmm-3.0 --cflags --libs)

должны работать.

1

Существует проблема отслеживания такого поведения: https://github.com/fish-shell/fish-shell/issues/982

В основном, проблема заключается в том, что рыба предполагает, что аргументы разделяются символами новой строки, в то время как PKG-конфигурации выходов пространств, которые можно увидеть здесь:

$ echo "'"(pkg-config --cflags eigen3)"'" 
'-I/usr/include/eigen3 '