Primero de, la llamada:
include(FindPkgConfig)
debe ser reemplazado por:
find_package(PkgConfig)
La find_package()llamada es más flexible y permite opciones como REQUIRED, que hacen cosas automáticamente con las que uno tendría que hacer manualmente include().
En segundo lugar, las llamadas manuales pkg-configdeben evitarse cuando sea posible. CMake viene con un amplio conjunto de definiciones de paquetes, que se encuentran en Linux en /usr/share/cmake-3.0/Modules/Find*cmake. Estos brindan más opciones y opciones para el usuario que una llamada sin procesar pkg_search_module().
En cuanto al target_use()comando hipotético mencionado , CMake ya lo tiene incorporado de alguna manera con PUBLIC | PRIVATE | INTERFACE. Una llamada como target_include_directories(mytarget PUBLIC ...)hará que los directorios de inclusión se utilicen automáticamente en cada destino que utilice mytarget, por ejemplo target_link_libraries(myapp mytarget). Sin embargo, este mecanismo parece ser solo para bibliotecas creadas dentro del CMakeLists.txtarchivo y no funciona para bibliotecas adquiridas conpkg_search_module() . La llamadaadd_library(bar SHARED IMPORTED) podría usarse para eso, pero aún no lo he investigado.
En cuanto a la pregunta principal, esto aquí funciona en la mayoría de los casos:
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})
El SDL2_CFLAGS_OTHERcontiene define y otras banderas necesarios para una compilación exitosa. Las banderasSDL2_LIBRARY_DIRSSDL2_LDFLAGS_OTHERSin embargo, las y aún se ignoran, no tengo idea de la frecuencia con la que eso se convertiría en un problema.
Más documentación aquí http://www.cmake.org/cmake/help/v3.0/module/FindPkgConfig.html
IMPORTED_TARGETrequiere CMake 3.6 o más reciente.