我正在为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
)