pkg-config란

pkg-config는 소프트웨어 개발 시 필요한 라이브러리의 존재 여부와 관련 설정(예: 컴파일러 플래그, 링크 플래그 등)을 관리하고 제공하는 도구이다. 주로 C와 C++ 프로그램에서 라이브러리를 쉽게 사용할 수 있도록 도와주는 역할을 한다.

패키지 찾기

‘pkg-config –exists’ 명령은 특정 패키지가 설치되어 있는지 확인하는 데 사용한다. 이 명령은 주어진 패키지가 설치되어 있으면 0을, 그렇지 않으면 0이 아닌 값을 반환한다. 예를 들어, ‘glib-2.0’ 패키지가 설치되어 있는지를 확인하려면 다음과 같이 사용하면 된다.

1
2
3
4
5
6
7
pkg-config --exists glib-2.0

if [ $? -eq 0 ]; then
echo "glib-2.0 is installed."
else
echo "glib-2.0 is not installed."
fi

새로운 패키지 등록하기

새로운 패키지를 등록하기 위해서는 ‘.pc’ 파일을 작성하여 ‘pkg-config’ 경로에 추가해야 한다. ‘.pc’ 파일은 패키지의 메타데이터를 포함하고 있으며 다음과 같은 정보를 포함한다.

  • prefix: 패키지 설치 경로
  • exec_prefix: 실행 파일 경로 (보통 ${prefix} 사용)
  • libdir: 라이브러리 경로 (보통 ${exec_prefix}/lib 사용)
  • includedir: 헤더 파일 경로 (보통 ${prefix}/include 사용)
  • Name: 패키지 이름
  • Description: 패키지 설명
  • Version: 패키지 버전
  • Libs: 컴파일러가 라이브러리를 링크할 때 사용하는 플래그
  • Cflags: 컴파일러가 헤더 파일을 찾을 때 사용하는 플래그

예를 들어, ‘my-package’라는 패키지를 등록하려면 다음과 같은 내용을 가진 ‘my-package.pc’ 파일을 작성한다.

1
2
3
4
5
6
7
8
9
10
prefix=/usr/local
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
includedir=${prefix}/include

Name: my-package
Description: My custom package
Version: 1.0.0
Libs: -L${libdir} -lmy-package
Cflags: -I${includedir}/my-package

작성한 ‘.pc’ 파일은 ‘pkg-config’가 검색할 수 있는 경로에 복사해야 한다. 일반적으로 /usr/lib/pkgconfig 또는 /usr/local/lib/pkgconfig 디렉터리를 사용한다. 다음과 같이 복사하는 방법이 가장 간단하다.

1
sudo cp my-package.pc /usr/local/lib/pkgconfig/

‘.pc’ 파일을 독립적인 위치에 보관해서 관리하고 싶다면, ‘PKG_CONFIG_PATH’ 환경 변수를 설정하여 다른 경로를 지정할 수도 있다.

1
export PKG_CONFIG_PATH=/path/to/my-pc-files:$PKG_CONFIG_PATH

간단히 다음과 같은 스크립트로 ‘my-package’ 패키지를 확인하고 사용할 수 있다.

1
2
3
4
5
6
7
pkg-config --exists my-package

if [ $? -eq 0 ]; then
echo "my-package is installed."
else
echo "my-package is not installed."
fi