1

Fedora 19 でフィッシュ シェルを使用しています。この単純な gtkmm の例をコンパイルしようとしていました。

fishで次のコマンドを使用してコンパイルしようとすると:

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`’

一方、同じことにbashを使用すると、正しくコンパイルされます。つまり、pkg-config は正しいフラグをフェッチします。

最近を使い始めたので何が悪いのかわかりません。誰かがこれで私を助けてくれますか?

また、これはスタックオーバーフローに関する私の最初の質問です。こんにちは。

ありがとうございました。

4

2 に答える 2

3

( )Bash が使用するバッククォートではなく、Fish shell がコマンド置換に使用します。参照:魚のチュートリアル. これが機能しない理由です。PATH に問題がある可能性は低いです。

理由はよくわかりませんが、バッククォートを単に括弧に置き換えると、何らかの理由で別のエラーが発生します ( where ...is output from pkg-config):

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

fish コマンドを使用することで、これを回避できますeval。そう:

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

動作するはずです。

于 2014-12-03T16:51:44.087 に答える
1

この動作を追跡する問題があります: https://github.com/fish-shell/fish-shell/issues/982

基本的に、問題は、魚が引数が改行で区切られていると想定しているのに対し、pkg-config はスペースを出力することです。これは次の場所で確認できます。

$ echo "'"(pkg-config --cflags eigen3)"'"
'-I/usr/include/eigen3 '
于 2015-09-20T15:45:22.270 に答える