在android studio中使用cmake

在build.gradle里面添加externalNativeBuild项就可以使用cmake

defaultConfig {
    externalNativeBuild {
         cmake {
             cppFlags "-std=c++11"
             arguments "-DCMAKE_BUILD_TYPE=Release"
         } 
    }
}

    externalNativeBuild {
        cmake {
            path "src/main/cpp/CMakeLists.txt"
            version "3.10.2" // 也可以不要
        }
    }
}

通过arguments就可以给cmake传递参数:

指定build type为Release,这个Release是给CMakeList.txt里面用的,和gradle里面的build type不是一回事。
-DCMAKE_BUILD_TYPE=Release
指定NDK路径,System.getenv('ANDROID_NDK_HOME'获取系统环境变量ANDROID_NDK_HOME
-DCMAKE_ANDROID_NDK=$(System.getenv('ANDROID_NDK_HOME')),实测是不行的.

编译后会在app目录下生成.cxx目录

.cxx
├── cmake
│   ├── debug
│   │   └── arm64-v8a
│   │       ├── android_gradle_build.json
│   │       ├── android_gradle_build_mini.json
│   │       ├── build_command.txt
│   │       ├── build_model.json
│   │       ├── build.ninja
│   │       ├── build_output.txt
│   │       ├── CMakeCache.txt

打开这个目录下的build_command.txt文件,就可以看见argument是否生效,我的argument文件如下:

Executable : /home/tools/android-sdk/cmake/3.10.2.4988404/bin/cmake
arguments : 
-DANDROID_ABI=arm64-v8a
-DANDROID_PLATFORM=android-26
-DCMAKE_BUILD_TYPE=Release
-DANDROID_NDK=/home/tools/android-ndk/android-ndk-r17-beta2
-DCMAKE_CXX_FLAGS=-std=c++11
-DCMAKE_SYSTEM_NAME=Android
-DCMAKE_ANDROID_ARCH_ABI=arm64-v8a
-DCMAKE_SYSTEM_VERSION=26
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON
-DCMAKE_ANDROID_NDK=/home/tools/android-ndk/android-ndk-r17-beta2
-DCMAKE_TOOLCHAIN_FILE=/home/tools/android-ndk/android-ndk-r17-beta2/build/cmake/android.toolchain.cmake
-G Ninja
-DCMAKE_MAKE_PROGRAM=/home/tools/android-sdk/cmake/3.10.2.4988404/bin/ninja
-DCMAKE_BUILD_TYPE=Release
jvmArgs : 
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容