まず、呼び出し:
include(FindPkgConfig)
次のように置き換える必要があります。
find_package(PkgConfig)
find_package()
コールは、より柔軟であり、そのようななどのオプションができますREQUIRED
1が使用して手動で行う必要があろうと、自動的に物事を行います、include()
。
第二に、手動で呼び出すことpkg-config
は可能な限り避けるべきです。CMakeには、Linuxのの下にある豊富なパッケージ定義のセットが付属しています/usr/share/cmake-3.0/Modules/Find*cmake
。これらは、への生の呼び出しよりも多くのオプションと選択肢をユーザーに提供しますpkg_search_module()
。
前述の架空のtarget_use()
コマンドに関しては、CMakeにはすでにPUBLIC | PRIVATE | INTERFACEの方法で組み込みがあります。以下のようなコールは、target_include_directories(mytarget PUBLIC ...)
ディレクトリが自動的に使用しているすべてのターゲットで使用されるように含ませます mytarget
、例えばtarget_link_libraries(myapp mytarget)
。ただし、このメカニズムはCMakeLists.txt
ファイル内で作成されたライブラリにのみ適用されるようで、で取得されたライブラリでは機能しませんpkg_search_module()
。そのために電話add_library(bar SHARED IMPORTED)
が使われるかもしれませんが、私はまだそれを調べていません。
主な質問に関しては、これはほとんどの場合ここで機能します:
find_package(PkgConfig REQUIRED)
pkg_check_modules(SDL2 REQUIRED sdl2)
...
target_link_libraries(testapp ${SDL2_LIBRARIES})
target_include_directories(testapp PUBLIC ${SDL2_INCLUDE_DIRS})
target_compile_options(testapp PUBLIC ${SDL2_CFLAGS_OTHER})
SDL2_CFLAGS_OTHER
定義し、成功したコンパイルに必要な他のフラグが含まれています。旗SDL2_LIBRARY_DIRS
とSDL2_LDFLAGS_OTHER
しかし、まだ、それが問題になる頻度は考えて無視されていません。
その他のドキュメントはこちらhttp://www.cmake.org/cmake/help/v3.0/module/FindPkgConfig.html
IMPORTED_TARGET
CMake3.6以降が必要です。