トップ 最新 追記

Cocoa練習帳

iOS/iPhone/iPad/watchOS/tvOS/MacOSX/Android プログラミング, Objective-C, Cocoa, Swiftなど

2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|07|08|09|10|11|12|
2022|01|02|03|04|05|06|07|08|09|10|11|12|
2023|01|02|03|04|05|06|07|08|09|10|11|12|
2024|01|02|03|04|

2021-02-11 [Android][NDK]CMakeを設定する

ビルド周りを新しくしていったら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 )

トップ 最新 追記