4

Windows のビルド環境として cygwin を使用しようとしています。GTK+ などのサードパーティ パッケージに依存しています。

通常、Linux でビルドする場合、Makefile で gcc への引数として pkg-config への呼び出しを追加できるため、次のようになります。

gcc example.c `pkg-config --libs --cflags gtk+-2.0` 

これは Linux では問題なく動作しますが、cygwin では次のようになります。

:無効な引数
make: *** 【例】エラー1

今、私は手動で pkg-config を実行し、出力を Makefile に貼り付けているだけですが、これは本当にひどいことです。この問題を回避または修正する良い方法はありますか?

Makeは犯人ではありません。gcc を呼び出すために使用するコマンド ラインをコピーして貼り付けることができます。それ自体で gcc が実行され、「: 無効な引数」で停止します。

コマンド ライン引数を出力する小さなテスト プログラムを作成しました。

for (i = 0; i < argc; i++)
    printf("'%s'\n", argv[i]);

一重引用符に注意してください。

$ pkg-config --libs gtk+-2.0
-Lc:/mingw/lib -lgtk-win32-2.0 -lgdk-win32-2.0 -latk-1.0 -lgdk_pixbuf-2.0 -lpang
owin32-1.0 -lgdi32 -lpangocairo-1.0 -lpango-1.0 -lcairo -lgobject-2.0 -lgmodule-
2.0 -lglib-2.0 -lintl

テスト プログラムの実行:

$ ./t `pkg-config --libs gtk+-2.0`
「C:\cygwin\home\smo\pvm\src\t.exe」
「-Lc:/mingw/lib」
「-lgtk-win32-2.0」
「-lgdk-win32-2.0」
「-latk-1.0」
「-lgdk_pixbuf-2.0」
「-lpangowin32-1.0」
「-lgdi32」
「-lpangocairo-1.0」
「-lpango-1.0」
'-lcairo'
「-lgobject-2.0」
「-lgmodule-2.0」
「-lglib-2.0」
「-リントル」
'

最後の行の一重引用符に注意してください。argc が本来よりも 1 大きく、argv[argc - 1] が null のようです。Linux で同じテストを実行しても、この結果は得られません。

そうは言っても、バックティック演算子を使用するのではなく、Makefile で pkg-config の結果を変数に格納し、その変数を使用する方法はありますか?

4

6 に答える 6

6

そうは言っても、バックティック演算子を使用するのではなく、Makefile で pkg-config の結果を変数に格納し、その変数を使用する方法はありますか?

GTK_LIBS = $(シェル pkg-config --libs gtk+-2.0)

于 2008-09-19T23:38:58.717 に答える
4

Cygwinが提供するmakeを使用していることを確認しますか?使用する

which make
make --version

チェックするには-これは「/usr/ bin/make」と「GNUMake3.8[...]」または同様のものを返すはずです。

于 2008-09-19T14:13:16.067 に答える
2

うーん...試してみましたか

make -d

これにより、(大量の) デバッグ出力が得られます。

于 2008-09-19T14:59:32.103 に答える
1

「t」出力の末尾の一重引用符は、CRLF 変換のアーティファクトである可能性があります。pkg-config は cygwin アプリですか? GNU make はさまざまな行末スタイルにかなり寛容であるように思われるため、以前に投稿した $(shell) ソリューションがこれに役立つ可能性があります。

于 2008-09-20T00:06:38.183 に答える
1

私の推測では、cygwin の gcc は -Lc:/mingw/lib を処理できません。それを cygwin パスに変換してみてください。

GTK_LIBS = $(patsubst -Lc:/%,-L/cygdrive/c/%,$(shell pkg-config --libs gtk+-2.0))
于 2008-09-19T23:58:03.087 に答える
1

同様の問題があり、ここで修正を見つけました: http://www.demexp.org/dokuwiki/en:demexp_build_on_windows

/usr/bin/pkg-config を使用するように、PATH の /cygwin/c/GTK/bin の前に /usr/bin を配置するように注意してください。これが必要なのは、GTK の pkg-config がパスを後処理し、多くの場合、それらを Windows の絶対パスに相当するパスに変換するためです。結果として、cygwin の下のツールはこれらのパスを理解できない場合があります。

于 2011-06-27T20:57:29.723 に答える