【CMake】CMake 引入 ( Android Studio 创建 Native C++ 工程 | C/C++ 源码编译过程 | Makefile 工具 | CMake 引入 )(二)

简介: 【CMake】CMake 引入 ( Android Studio 创建 Native C++ 工程 | C/C++ 源码编译过程 | Makefile 工具 | CMake 引入 )(二)

二、C/C++ 源码编译过程


上述 Native C++ 工程中的 C++ 代码是在 CMake\app\src\main\cpp 目录下的 native-lib.cpp ;


如果将该 native-lib.cpp 源码打包成 Kotlin 或 Java 中通过 JNI 可调用的 so 动态库 , 需要使用 Make 工具进行编译 ;


Make 工具需要使用 Makefile 命令 , 如 " g++ native-lib.cpp " , 编译的默认输出结果是 a.out 文件 ;


如果指定默认名字就使用 " gcc native-lib.cpp -o main " , 此时编译输出的结果是 main 文件 ;


gcc native-lib.cpp 命令执行的完整的编译过程 , 包括 预处理 , 编译 , 汇编 , 链接 四个过程 , 参考 【C 语言】编译过程 分析 ( 预处理 | 编译 | 汇编 | 链接 | 宏定义 | 条件编译 | 编译器指示字 ) 博客 ;


image.png


编译过程 : 预处理 -> 编译 -> 汇编 -> 链接;


编译预处理 : 产生 .i 后缀的预处理文件;

编译操作 : 产生 .s 后缀的汇编文件;

汇编操作 : 产生 .o 后缀的机器码二进制文件;

链接操作 : 产生可执行文件 ;





三、Makefile 工具


如果源码个数较少可以直接使用 " gcc native-lib.cpp native-lib2.cpp … " 命令 , 逐个将源码添加在 gcc 之后 , 如果源码个数太多 , 达到几百上千个 , 此时就需要使用 Makefile 编译工具了 , 编写 Makefile 脚本 , 然后直接执行该脚本 , 即可完成数量庞大的源码编译工作 ;


Makefile 参考 【嵌入式开发】 嵌入式开发工具简介 (裸板调试示例 | 交叉工具链 | Makefile | 链接器脚本 | eclipse JLink 调试环境) 博客 ;


Makefile 脚本示例 : 这是拷贝自上面的博客 , 用于编译汇编文件的脚本 ;


all: led.o 
  @arm-linux-ld -Tled.lds -o led.elf $^
  @arm-linux-objcopy -O binary led.elf led.bin
led.o : led.S
  arm-linux-gcc -g -o $@ -c $^
.PHONY: clean
clean:
  rm *.o led.elf led.bin


在 Makefile 的当前目录 , 执行 make 命令 , 会自动执行 Makefile 脚本中的编译命令 ;






四、CMake 引入


Makefile 在 Linux 下有其固定的编写格式 , 在 Windows 下有另外一种编写格式 , 不同的平台的 Makefile 的编写格式都不同 , 非常不利于跨平台 ;


CMake 解决了上述 Makefile 跨平台问题 , 使用 CMake 可以完美处理在不同平台之间的 Makefile 不兼容的问题 ;


CMake 可以生成不同平台的 Makefile 文件 ;


目录
相关文章
|
SQL 人工智能 Dart
Android Studio的插件生态非常丰富
Android Studio的插件生态非常丰富
987 1
|
Ubuntu Linux Android开发
Android Studio支持多种操作系统
Android Studio支持多种操作系统
779 1
|
开发工具 Android开发 iOS开发
如何在Android Studio中配置Flutter环境?
如何在Android Studio中配置Flutter环境?
2895 160
|
12月前
|
Android开发 Windows
Android studio 报错Connect to 127.0.0.1:8888 [/127.0.0.1] failed: Connection refused: connect(已解决)
这是一篇关于解决Android Studio报错“Connect to 127.0.0.1:8888 failed: Connection refused”的文章。问题通常因系统代理设置被Android Studio自动保存导致。解决方法是找到系统中Android Studio使用的gradle.properties文件(位于Windows的C:\Users\你的电脑用户名\.gradle或Mac的/Users/.{你的用户目录}/.gradle),删除或注释掉多余的代理配置后保存并重新Sync项目。希望此经验能帮助快速解决同类问题!
2337 36
|
12月前
|
Java Android开发
Android studio中build.gradle文件简单介绍
本文解析了Android项目中build.gradle文件的作用,包括jcenter仓库配置、模块类型定义、包名设置及依赖管理,涵盖本地、库和远程依赖的区别。
1013 19
|
前端开发 Java 编译器
当flutter react native 等混开框架-并且用vscode-idea等编译器无法打包apk,打包安卓不成功怎么办-直接用android studio如何打包安卓apk -重要-优雅草卓伊凡
当flutter react native 等混开框架-并且用vscode-idea等编译器无法打包apk,打包安卓不成功怎么办-直接用android studio如何打包安卓apk -重要-优雅草卓伊凡
556 36
当flutter react native 等混开框架-并且用vscode-idea等编译器无法打包apk,打包安卓不成功怎么办-直接用android studio如何打包安卓apk -重要-优雅草卓伊凡
|
Dart 前端开发 Android开发
【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
483 4
【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
|
Android开发
【Android 逆向】Android 逆向通用工具开发 ( Android 平台运行的 cmd 程序类型 | Android 平台运行的 cmd 程序编译选项 | 编译 cmd 可执行程序 )(二)
【Android 逆向】Android 逆向通用工具开发 ( Android 平台运行的 cmd 程序类型 | Android 平台运行的 cmd 程序编译选项 | 编译 cmd 可执行程序 )(二)
282 0
【Android 逆向】Android 逆向通用工具开发 ( Android 平台运行的 cmd 程序类型 | Android 平台运行的 cmd 程序编译选项 | 编译 cmd 可执行程序 )(二)
|
移动开发 Android开发 C++
【Android 逆向】Android 逆向通用工具开发 ( Android 平台运行的 cmd 程序类型 | Android 平台运行的 cmd 程序编译选项 | 编译 cmd 可执行程序 )(一)
【Android 逆向】Android 逆向通用工具开发 ( Android 平台运行的 cmd 程序类型 | Android 平台运行的 cmd 程序编译选项 | 编译 cmd 可执行程序 )(一)
300 0
【Android 逆向】Android 逆向通用工具开发 ( Android 平台运行的 cmd 程序类型 | Android 平台运行的 cmd 程序编译选项 | 编译 cmd 可执行程序 )(一)
|
7月前
|
移动开发 前端开发 Android开发
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
1325 12
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡