まず、呼び出し:
include(FindPkgConfig)
次のように置き換える必要があります。
find_package(PkgConfig)
find_package()コールは、より柔軟であり、そのようななどのオプションができますREQUIRED1が使用して手動で行う必要があろうと、自動的に物事を行います、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_TARGETCMake3.6以降が必要です。