例えばgccの引数として利用する場合、以下のようにバッククオートで囲んでやる。
gcc xxxx.c `pkg-config --cflags --libs gtk+-3.0`
すると、gccコマンドよりも先にバッククオートで囲まれた部分がコマンドライン上で実行され、その結果が置き換わってgccの引数として利用できる。
前回、恐ろしく長い引数だったのが、これだけで済むのは素晴らしい。
NetBeansのようなIDEを利用している場合にもこれを指定するオプションがあるので、利用すると便利。
引数は
--cflags -I(ヘッダファイル)に対応した引数を返す
--libs -l(ライブラリ)に対応した引数を返す
を意味している。
gtk+-3.0の部分は.pc ファイル名。
pkg-configは予め登録された拡張子.pc ファイルをもとにして情報を返している。
ライブラリによってはpkg-configに対応しておらず、自動的に.pcが作られない場合もあるためすべてのライブラリで使えるわけではない。
私の場合、拡張子.pcのあるディレクトリを
sudo find / -name "*.pc" -ls
で確認すると、以下のディレクトリの下でが見つかった。
/usr/share/pkgconfig/
/usr/lib/pkgconfig/
/usr/lib/i386-linux-gnu/pkgconfig/
ちなみにgdk-3.0はここだった。
/usr/lib/i386-linux-gnu/pkgconfig/gdk-3.0.pc
中身は以下の通り。
prefix=/usr
exec_prefix=${prefix}
libdir=/usr/lib/i386-linux-gnu
includedir=${prefix}/include
targets=x11 wayland
gtk_binary_version=3.0.0
gtk_host=i686-pc-linux-gnu
Name: GTK+
Description: GTK+ Graphical UI Library
Version: 3.10.8
Requires: gdk-3.0 atk cairo cairo-gobject gdk-pixbuf-2.0 gio-2.0
Requires.private: atk atk-bridge-2.0 pangoft2 gio-unix-2.0
Libs: -L${libdir} -lgtk-3
Cflags: -I${includedir}/gtk-3.0
pkg-config(今日覚えた呪文)
コマンド置換と言われる方法はバッククオートで囲む以外にも
$(pkg-config --cflags --libs gtk+-3.0)
としても結果は同じ。こちらの方法ではネストできるのが違うところ。
0 件のコメント:
コメントを投稿