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 の結果を変数に格納し、その変数を使用する方法はありますか?