pkg-configでlibsとincludeを追加


まず,C++プロジェクトをコマンドラインでコンパイルする方法を紹介し,その問題点を指摘する.
g++の生成実行可能ファイル構文:
g++ -o test test.c -I/home/include -pthread -L/usr/local/lib -llog4cpp
ここで、
1,-Iは検索するヘッダファイルのパスを表し、システムのデフォルトの検索パスは/usr/include、/usr/local/includeを含む./home/includeを追加すると、/home/includeで検索されます.-pthreadは検索対象のヘッダファイルです.
locate pthread.hコマンド、わかりますpthread.hが存在する経路は/usr/includeである.
2,-L後は検索するダイナミックチェーンライブラリのパスを示し、システムのデフォルトの検索パスは環境変数LD_LIBRARY_PATH設定.
echo$LDでLIBRARY_PATHは、-Lのデフォルトパスが/usr/local/lib:/usr/local/lib 64:/usr/local/src/ACE_wrappers(自分で設定した)
log 4 cppは、/usr/local/libに位置する検索対象の動的チェーンライブラリを表す.
質問:コンパイルするたびに、参照するヘッダファイル、ダイナミックリンクライブラリを考慮する必要があります.面倒です.また、opencvのような大きなプロジェクトでは、ダイナミックリンクライブラリは2つ以上あり、プロジェクトをコンパイルするたびにこんなに多くのリンクライブラリを書くので、面倒なだけでなく、エラーも発生しやすい.
 
次は本題に入ります.
pkg-configでプロファイルを読み取るフォーマットでこの作業を完了することができ、例えばlog 4 cppをコンパイルする必要がある場合、その構成パラメータをlog 4 cppに書くことができる.PCファイルでリンクをコンパイルする場合、次のコマンドを呼び出すとリンクのコンパイルが完了します.
g++ -o test test.cpp `pkg-config --libs --cflags log4cpp`
log 4 cppを見てみましょう.PCの内容は、以下の通りです.
prefix=/usr/local
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
includedir=${prefix}/include

Name: log4cpp
Description: C++ library for flexible logging, modeled after Log4j
Version: 1.1 
Libs: -L${libdir} -llog4cpp  
Cflags: -I${includedir} -pthread 

Libsは、ダイナミックリンクライブラリを参照するパスと、必要なダイナミックリンクライブラリを表します.Cflagsは、ヘッダファイルを参照するパスと、必要なヘッダファイルを表します.
 
-----------------------------------------------------------------------------------------------------------------------------------
以下、簡単にpkg-configを紹介します.その検索経路は説明書を参照することができます.man pkg-config
PKG_CONFIG_PATH
             List of secondary directories where ‘.pc’ files are looked up.

PKG_CONFIG_LIBDIR
             List of primary directories where ‘.pc’ files are looked up.

以上のようにpkg-configの探索を行う.PCのパスはPKG_CONFIG_LIBDIR、PKG_CONFIG_PATHは、前者が第1の経路であり、後者が第2の経路であることを共に決定する.検索パスの下のすべてを検索すると.PCファイルは、pkg-config--list-allを使用できます.