AndroidStdio中CMakeList.txt语法笔记

5 篇文章 0 订阅
1 篇文章 0 订阅
这篇博客详细介绍了Android Studio中CMakeLists.txt的使用,包括字段含义、find_library的系统库查找、本地库的编译任务及输出位置、CMake基本语法以及如何修改CmakeList.txt文件路径。主要内容涉及最低支持版本、脚本语句、输出结果和文件路径的调整。
摘要由CSDN通过智能技术生成

一,cmake几个字段或方法的含义

1.最低支持版本

2.真正使用版本

3.find_library查找系统库(系统库所在位置与以下位置有关) 

如果loca.properties文件没指定版本号系统就选择最新的

system_libs.cmake

set(NDK_SYSTEM_LIBS 
"libEGL.so;
libGLESv1_CM.so;
libGLESv2.so;
libGLESv3.so;
libOpenMAXAL.so;
libOpenSLES.so;
libaaudio.so;
libamidi.so;
libandroid.so;
libbinder_ndk.so;
libc.so;
libcamera2ndk.so;
libdl.so;
libjnigraphics.so;liblog.so;
libm.so;
libmediandk.so;
libnativewindow.so;
libneuralnetworks.so;
libstdc++.so;
libsync.so;
libvulkan.so;
libz.so")

这些库的所在位置

 

3.编译本地库的task以及输出位置

3.1脚本语句

#设置变量
set(val 123)
message("-------------------------------------------------")
message("变量val=${val}")
message("-------------------------------------------------")
message("CMAKE_CURRENT_LIST_DIR=${CMAKE_CURRENT_LIST_DIR}")
message("CMAKE_CURRENT_BINARY_DIR=${CMAKE_CURRENT_BINARY_DIR}")
message("CMAKE_CURRENT_LIST_LINE=${CMAKE_CURRENT_LIST_LINE}")
message("CMAKE_CURRENT_LIST_FILE=${CMAKE_CURRENT_LIST_FILE}")
message("CMAKE_CURRENT_SOURCE_DIR=${CMAKE_CURRENT_SOURCE_DIR}")
message("CMAKE_SOURCE_DIR=${CMAKE_SOURCE_DIR}")
message("CMAKE_ANDROID_ARCH_ABI=${CMAKE_ANDROID_ARCH_ABI}")

3.2本地库可以单独编译,它对应得task位置如下

3.3编译的动/静态库所在的位置

3.4输出日志的位置

下面两个位置也能看到日志,但因版本的原因我的看不了

二,CMake基本语法

1.脚本语句

#声明列表
set(list_val 1 2 3 4 5)
set(list_val "4;5;6;7;8")
#布尔值
message("---------------------布尔值------------------------")
#true:ON YES TRUE Y 非零值
#false:OFF NO FALSE N IGNORE NOTFOUND 0
if (TRUE)
    message("真")
else ()
    message("假")
endif ()
#while循环
message("---------------------while循环------------------------")
set(str "")
while (NOT str STREQUAL "xxx")
    set(str ${str}x)
    message(${str})
endwhile ()
#while循环
message("---------------------foreach循环1------------------------")
set(list 1 2 3 4 5 6)
foreach (item ${list})
    message(${item})
endforeach ()
message("---------------------foreach循环2------------------------")
set(list1 299 300 310)
foreach (item IN LISTS list1)
    message(${item})
endforeach ()
message("---------------------foreach循环3------------------------")
foreach (item RANGE 10)
    message(${item})
endforeach ()
message("---------------------function------------------------")
function(FUNNAME arg0 arg1 arg2)
message("参数总数:${ARGC}")
message("arg0:${ARGV0}")
message("arg1:${ARGV1}")
message("arg2:${ARGV2}")
endfunction()
FUNNAME(22 err you)

2.输出结果

---------------------布尔值------------------------
真
---------------------while循环------------------------
x
xx
xxx
---------------------foreach循环1------------------------
1
2
3
4
5
6
---------------------foreach循环2------------------------
299
300
310
---------------------foreach循环3------------------------
0
1
2
3
4
5
6
7
8
9
10
---------------------function------------------------
参数总数:3
arg0:22
arg1:err
arg2:you

三,修改CmakeList.txt文件路径

1.移动CmakeList.txt文件位置

2.build.gradle下修改CmakeList文件路径

android {
   ...
    externalNativeBuild {
        cmake {
//            path "src/main/cpp/CMakeLists.txt"
            path "src/main/CMakeLists.txt"
            //cmake真正使用的版本
            version "3.10.2"
        }
    }
    ...
}

3.CmakeList文件相应改动 

3.1源文件所在目录

3.2改动前

#cnake最低支持版本
cmake_minimum_required(VERSION 3.10.2)
project("ffmpeg_test")
#TODO 第一步,导入头文件
include_directories("include")
#TODO 第二步批量导入所有源文件
aux_source_directory("${CMAKE_SOURCE_DIR}" my_source_path)
#TODO 第三步 导入库文件 CMAKE_SOURCE_DIR=CMakeList.txt所在位置

#静态库的位置
#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -L${CMAKE_SOURCE_DIR}/${CMAKE_ANDROID_ARCH_ABI}")
#动态库的位置
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -L${CMAKE_SOURCE_DIR}/../jniLibs/${CMAKE_ANDROID_ARCH_ABI}")

add_library( # Sets the name of the library.
        native-lib

        # Sets the library as a shared library.
        SHARED

        # Provides a relative path to your source file(s).
        ${my_source_path})

find_library( # Sets the name of the path variable.
        log-lib
        log)
target_link_libraries( # Specifies the target library.
        native-lib

        # Links the target library to the log library
        # included in the NDK.
        #TODO 第四步 将ffmpeg相关的库链接到总库
        ${log-lib}
        avformat
        avfilter
        swscale
        avcodec
        avutil
        )

3.3改动后

#cnake最低支持版本
cmake_minimum_required(VERSION 3.10.2)
project("ffmpeg_test")
#TODO 第一步,导入头文件
include_directories("cpp/include")
#TODO 第二步批量导入所有源文件
aux_source_directory("${CMAKE_SOURCE_DIR}/cpp" my_source_path)
#TODO 第三步 导入库文件 CMAKE_SOURCE_DIR=CMakeList.txt所在位置

#静态库的位置
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -L${CMAKE_SOURCE_DIR}/cpp/${CMAKE_ANDROID_ARCH_ABI}")
#动态库的位置
#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -L${CMAKE_SOURCE_DIR}/jniLibs/${CMAKE_ANDROID_ARCH_ABI}")

add_library( # Sets the name of the library.
        native-lib

        # Sets the library as a shared library.
        SHARED

        # Provides a relative path to your source file(s).
        ${my_source_path})

find_library( # Sets the name of the path variable.
        log-lib
        log)
target_link_libraries( # Specifies the target library.
        native-lib

        # Links the target library to the log library
        # included in the NDK.
        #TODO 第四步 将ffmpeg相关的库链接到总库
        ${log-lib}
        avformat
        avfilter
        swscale
        avcodec
        avutil
        )

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值