从CMake获取并构建libpng android



我正在为Android开发一个C++库,并且依赖libpng。我正在使用修改后的Android库https://github.com/julienr/libpng-android.git,它有一个build.sh文件,以便为不同的体系结构进行编译。或者可以使用ndk-build编译它。

我正在使用FetchContent从CMake获取库,这有效地下载了源文件,但它没有正确构建。我正在设置BUILD_COMMAND,但它不起作用。

FetchContent_Declare( png
GIT_REPOSITORY      https://github.com/julienr/libpng-android.git
GIT_TAG             master
UPDATE_DISCONNECTED TRUE
STEP_TARGETS        update
BUILD_COMMAND       "${NDK_PATH}/ndk-build.cmd NDK_PROJECT_PATH=${png_SOURCE_DIR}"
FetchContent_GetProperties(png)
if (NOT png_POPULATED)
FetchContent_Populate(png)
add_subdirectory("${png_SOURCE_DIR}" "${png_BINARY_DIR}" EXCLUDE_FROM_ALL)
endif()

BUILD_COMMAND似乎什么都不做。

那么,我如何从CMake获取并构建libpng-android,然后将结果作为导入库导入?

根据文档。。。

以下选项被明确禁止(它们被FetchContent_Populate((命令(:

  • CONFIGURE_COMMAND
  • BUILD_COMMAND
  • INSTALL_COMMAND
  • TEST_COMMAND

ref:https://cmake.org/cmake/help/latest/module/FetchContent.html#command:fetchcontent_getproperties(只是上面的一段(

感谢@Tsyvarev和@Mizux,我可以按照正确的方式来做。

FetchContent_Declare( libpng
GIT_REPOSITORY      https://github.com/julienr/libpng-android.git
GIT_TAG             master
UPDATE_DISCONNECTED TRUE
STEP_TARGETS        update)
FetchContent_GetProperties(libpng)
if (NOT libpng_POPULATED)
FetchContent_Populate(libpng)
add_subdirectory("${libpng_SOURCE_DIR}" ${libpng_BINARY_DIR} EXCLUDE_FROM_ALL)
endif()
exec_program("${CMAKE_ANDROID_NDK}/ndk-build.cmd"
${libpng_BINARY_DIR}
ARGS NDK_PROJECT_PATH=${libpng_SOURCE_DIR} APP_ABI=${ANDROID_ABI})

然后链接库

target_link_libraries( project
PRIVATE
${libpng_SOURCE_DIR}/obj/local/${ANDROID_ABI}/libpng.a
)

最新更新