iOS/iPhone/iPad/watchOS/tvOS/MacOSX/Android プログラミング, Objective-C, Cocoa, Swiftなど
ビルド周りを新しくしていったらndk-buildで問題が発生したため、CMakeについて調べたことを備忘録としてまとめる。
ndk-buildはGNU Makeベースのビルドの仕組みでAndroid独自のものとなり、Android.mkとApplication.mkに設定を記述する。
CMakeはAndroidのNDKビルド以外でも使用されている仕組みで、CMakeLists.txtに設定を記述する。
以下は簡単の共有ライブラリの記述の例。
cmake_minimum_required(VERSION 3.4.1)
add_library(
# ライブラリ名
native-lib
# 共有or静的の指定
SHARED
# ソースファイル
src/main/cpp/native-lib.cpp )
# ヘッダー検索パスの設定
include_directories(src/main/cpp/include/)
# 変数log-libにパスlogを代入
find_library(
log-lib
log )
# 静的ライブラリを追加
add_library( app-glue
STATIC
${ANDROID_NDK}/sources/android/native_app_glue/android_native_app_glue.c )
# ライブラリをリンク
target_link_libraries(
native-lib
app-glue
${log-lib} )
ビルド済みライブラリを追加する場合はIMPORTフラグを使用し、set_target_propertiesでパスを指定する。
add_library( imported-lib
SHARED
IMPORTED )
set_target_properties(
imported-lib
PROPERTIES IMPORTED_LOCATION
imported-lib/src/${ANDROID_ABI}/libimported-lib.so )
# ヘッダー検索パスに追加
include_directories( imported-lib/include/ )
ビルド済みライブラリも同様にリンクを設定する。
target_link_libraries( native-lib imported-lib app-glue ${log-lib} )
CMakeプロジェクトは階層化できるので、モジュール毎に用意して、大元で束ねられる。
# lib_src_DIRに対象となるCMakeプロジェクトのパスを設定
set( lib_src_DIR ../gmath )
# lib_build_DIRに出力先のパスを設定し、そのディレクトリを作成する。
set( lib_build_DIR ../gmath/outputs )
file(MAKE_DIRECTORY ${lib_build_DIR})
# 下位のCMakeLists.txtの場所と出力先を追加。
# as a build dependency.
add_subdirectory(
${lib_src_DIR}
${lib_build_DIR} )
# 下位の階層のライブラリを追加
add_library( lib_gmath STATIC IMPORTED )
set_target_properties( lib_gmath PROPERTIES IMPORTED_LOCATION
${lib_build_DIR}/${ANDROID_ABI}/lib_gmath.a )
include_directories( ${lib_src_DIR}/include )
# ライブラリをリンク
target_link_libraries( native-lib ... lib_gmath )