먼저, 전화 :
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 이상이 필요합니다.