見出し画像

CMakeでPkgConfig

macOSで自分用プログラミングをしている
CPUはApple M2 Pro 、メモリは32GB 当然macOS
VSCode,CMake,Homebrw,コマンドラインで開発している

困るのはライブラリがCMakeのfind_package()で見つけられないとき
まぁライブラリ側がどのライブラリ管理システムを使うのかは自由だし、そんなことよりライブラリの内容にこだわって欲しい(まぁ建前)

PkgConfigに対応しているならCMakeでも使いたいので調べて使ってみた

# PkgConfig モジュールを明示的にロード
find_package(PkgConfig REQUIRED)

# PkgConfig モジュールを検索
function(find_pkg_config package)
    string(TOUPPER ${package} PACKAGE_NAME)
    pkg_check_modules(${PACKAGE_NAME} REQUIRED ${package})
    include_directories(${${PACKAGE_NAME}_INCLUDE_DIRS})
    link_directories(${${PACKAGE_NAME}_LIBRARY_DIRS})
    set(${package}_LIBS ${${PACKAGE_NAME}_LIBRARIES} PARENT_SCOPE)
endfunction()

# 使用するライブラリを検索してリンクの設定
find_pkg_config(cairo)
target_link_libraries(${PROJECT_NAME} ${cairo_LIBS})

# 使用するライブラリを検索してリンクの設定
find_pkg_config(gtk+-2.0)
target_link_libraries(${PROJECT_NAME} ${gtk+-2.0_LIBS})

上記のコードをCMakeLists.txtの最後にでも追加して、その後に呼び出すコードを書く
例えばgslなどはCMakeのfind_package関数では見つけられないけどPkgConfigには対応している。こんな時は以下のような記述を追加して上の関数を呼び出せば解決

途中でモジュール名を大文字にしている。必須では無いけどパッケージ系の関数の戻り値を表す変数は大文字で書くのが慣わしらしい(自信なし)
なので、大文字にした
まぁ小文字混在でも下のケースでは動作した

# 使用例
find_pkg_config(gsl)
target_link_libraries(${PROJECT_NAME} ${gsl_LIBS})

上記は gsl を使った時のサンプル

問題はたま~にいい加減な記述なパッケージもある
まぁ直してあげるか、自分用にだけ直しておくかは自由


この記事が気に入ったらサポートをしてみませんか?