0

私のFedora15ボックスでは、次のようなMakefileを書くことができます。

app  = MyApplication
deps = `pkg-config ...`

これは完全に正常に機能します。しかし、DebianマシンでそのようなMakefileを実行しようとすると、「=」の周りの空白が原因でエラーが発生したようです。したがって、次のように書き直します。

app=MyApplication
deps=`pkg-config ...`

それを修正します。今私の質問は、この非互換性はどのように引き起こされるのですか?私のFedora製はバージョン3.82ですが、Debian製は3.81です。makeの変更ログを検索しても、これを可能にする変更は見つかりませんでした。

編集:

私はこの奇妙な振る舞いの原因を見つけたようです。ほとんどのmakefileでは、通常、変数「include」を使用してすべてのpkg-config出力を保持しています。どうやら「include」はある種のキーワードであり、Debianでこのように使用されていない場合は

include="stuff"

マクロをトリガーして、パスなどを探します。上記のように使用すれば、正規変数として使用できます。しかし、ここで興味深い部分は次のとおりです。Fedoraでは常に変数名として「include」を使用できます。したがって、次のような行:

include = `pkg-config --blah`

Fedoraでは完全に機能しましたが、Debianでは常に「Makefile:2:=:そのようなファイルやディレクトリはありません」という行を吐き出していました(「=」やその他すべてがパスであるように見えました)

今でも私の質問は残っていますが、なぜFedoraでそのようなことができるのですか(なぜ'includeマクロがそこで定義されていないようです)がDebianではできないのですか?

4

1 に答える 1

1

今でも私の質問は残っていますが、なぜFedoraでそのようなことができるのですか(なぜ「インクルードマクロがそこで定義されていないようです)、Debianではできませんか?

この動作の違いは、Linux のディストリビューションの違いによるものではなくmake、それらのディストリビューションのバージョンの違いによるものです。の後に空白がある場合include、前に=(または他の割り当てフレーバー) は、それをディレクティブ3.81として誤って解析します。include

などの他のディレクティブについても同じことが言えvpathます。では3.81、名前の付いた変数に値を割り当てても、 のvpath前にスペースがあると機能しません。=変数vpathは定義されません。では3.82、それは修正されました -- もしそのように呼びたいなら :-)makeいずれにせよ、これらの変数名について文句を言いたいと思います。

于 2012-07-21T17:34:16.847 に答える