보통 inherit pkgconfig로 사용된다.
openembedded-core/meta/classes/pkgconfig.bbclass가 있는데 내용은 아래와 같다.
DEPENDS:prepend = "pkgconfig-native "
$TMPDIR/work/x86_64-linux/pkgconfig-native
가 있다는 건데?-I/usr/include/glib-2.0
, -lglib-2.0
과 같이 설정 했던 것이 기억나는가?/usr/local
과 같은 경로에 있다면, 일일히 옵션을 적어줘야한다.pkgconfig
가 도와준다.-I${includedir}/foo
, -L${libdir} -lfoo
.pc
파일로 관리가 된다./usr/
lib/pkgconfig
/usr/local/
lib/pkgconfig
.pc
파일의 예Name
: 라이브러리 | 패키지이름으로 사람에게 읽힐 용도로 사용한다.pkg-config
툴에서 사용하는 .pc
파일의 파일 이름과는 별개Description
URL
Version
이 패키지를 가져다가 사용하는 다른 패키지에 영향을 줄 수 있는 부분이다.pkg-config
시스템은 RPM의 버전 비교 알고리즘을 사용한다..
과 숫자
로만 이루어진 형태를 사용해야 한다.Requires
: 이 패키지가 Depend하는 다른 패키지 이름의 목록으로 공백으로 구분한다.Requires.private
: 이 패키지가 Depend하는 다른 패키지의 이름 목록으로 공백으로 구분한다.Requires
와는 다르게, 패키지 안에서만 사용하며, 이 패키지를 가져다 사용하는 애플리케이션에는 사용할 필요 없을 패키지를 나열한다.Conflicts
(optional): 패키지와 충돌을 일으키는 다른 패키지를 목록 형식으로 정의한다. 버전을 지정하는 형식은 Requires와 같다. Conflicts: bar < 1.2.3, bar >= 1.3.0
형식으로 같은 패키지를 두 번 정의하는 것도 가능하다.Cflags
: 외부에서 이 패키지를 가져다 컴파일할 때 사용하는 컴파일러 옵션 플래그로, 이 패키지에서 의존하는 컴포넌트가 pkg-config
파일을 지원하지 않아서 컴파일러 옵션을 지정하도록 전달하기 위해 사용된다.pkg-config
를 지원한다면 Requires
나 Requires.private
에 이름만을 나열해야 한다.Libs
: 외부에서 이 패키지를 가져다 링크할 때 사용하는 링크 옵션 플래그로, Cflags
와 마찬가지로 이 패키지에서 Public하게 의존하는 컴포넌트가 pkg-config
파일을 지원하지 않는 경우 링크 옵션을 지정하도록 전달하기 위해 사용한다.pkg-config
파일을 지원한다면 Requires
나 Requires.private
에 지정해야한다.Libs.private
: 외부에서 이 패키지를 가져다가 정적 링크할 때 사용하는 링크 옵션 플래그다. 이 패키지가 의존하여 사용하는 다른 패키지를 링크하는 옵션 플래그로 이 패키지를 가져다가 사용하는 애플리케이션에서 직접 사용할 필요 없을 패키지에 대한 링크 옵션 플래그이다. 이 패키지에서 의존하는 컴포넌트가 pkg-config
파일을 지원한다면, Requires
나 Requires.private
에 지정해야한다.pkg-config
파일이 라으벌리 하나만을 대표하는 것이 가장 좋으며, 이 때에는 패키지, 라이브러리 '마다' pkg-config
파일 하나씩 생성해야한다.libfoo.so
라면, libfoo.'pc'
라고 파일명을 짓자..pc
파일 이름이 내 패키지를 가리킬 수 있도록, 다른 .pc
파일과 겹치지 않는 파일 이름을 가지자.foo.pc
, foolib.pc
도 파일 이름으로 사용할 수 있다.$PKG_CONFIG_PATH
/usr/lib/pkgconfig
, /usr/share/pkgconfig
pkg-config
를 위치시킨다./usr/local/lib/pkgconfig
에 있는 경우도 있는데 이경우, export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
그럼 여튼, 내 프로그램이 라이브러리 x를 사용하려 한다.
$ gcc $(pkg-config --cflags --libs x) myapp.c -o myapp