По-перше, дзвінок:
include(FindPkgConfig)
слід замінити на:
find_package(PkgConfig)
find_package()Виклик є більш гнучким і дозволяє такі опції, як REQUIRED, що робити речі автоматично , що можна було б зробити вручну 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вимагає CMake 3.6 або новішої версії.