【CMake】CMake 引入 ( Android Studio 创建 Native C++ 工程 | C/C++ 源码编译过程 | Makefile 工具 | CMake 引入 )
文章目錄
- 一、在 Android Studio 中創(chuàng)建 Native C++ 工程
- 二、C/C++ 源碼編譯過程
- 三、Makefile 工具
- 四、CMake 引入
該系列博客的應用場景是 Android Studio 下 NDK 編程 , 使用 CMake 構建 C/C++ 工程 ;
一、在 Android Studio 中創(chuàng)建 Native C++ 工程
在 Android Studio 中創(chuàng)建 Native C++ 工程 :
設置工程相關屬性 , 名稱 , 包名 , 存放地址 , 以及語言, 這里選擇 Google 官方推薦的 Kotlin 語言 , 盡量避免使用 Java ;
選擇 C++ 標準 , 默認即可 ;
關于自動生成的模板參考 【Android NDK 開發(fā)】Kotlin 語言中使用 NDK ( 創(chuàng)建支持 Kotlin 的 NDK 項目 | Kotlin 語言中使用 NDK 要點 | 代碼示例 ) 博客 , 其中有完整的代碼示例 ;
二、C/C++ 源碼編譯過程
上述 Native C++ 工程中的 C++ 代碼是在 CMake\app\src\main\cpp 目錄下的 native-lib.cpp ;
如果將該 native-lib.cpp 源碼打包成 Kotlin 或 Java 中通過 JNI 可調用的 so 動態(tài)庫 , 需要使用 Make 工具進行編譯 ;
Make 工具需要使用 Makefile 命令 , 如 " g++ native-lib.cpp " , 編譯的默認輸出結果是 a.out 文件 ;
如果指定默認名字就使用 " gcc native-lib.cpp -o main " , 此時編譯輸出的結果是 main 文件 ;
gcc native-lib.cpp 命令執(zhí)行的完整的編譯過程 , 包括 預處理 , 編譯 , 匯編 , 鏈接 四個過程 , 參考 【C 語言】編譯過程 分析 ( 預處理 | 編譯 | 匯編 | 鏈接 | 宏定義 | 條件編譯 | 編譯器指示字 ) 博客 ;
編譯過程 : 預處理 -> 編譯 -> 匯編 -> 鏈接;
三、Makefile 工具
如果源碼個數(shù)較少可以直接使用 " gcc native-lib.cpp native-lib2.cpp … " 命令 , 逐個將源碼添加在 gcc 之后 , 如果源碼個數(shù)太多 , 達到幾百上千個 , 此時就需要使用 Makefile 編譯工具了 , 編寫 Makefile 腳本 , 然后直接執(zhí)行該腳本 , 即可完成數(shù)量龐大的源碼編譯工作 ;
Makefile 參考 【嵌入式開發(fā)】 嵌入式開發(fā)工具簡介 (裸板調試示例 | 交叉工具鏈 | Makefile | 鏈接器腳本 | eclipse JLink 調試環(huán)境) 博客 ;
Makefile 腳本示例 : 這是拷貝自上面的博客 , 用于編譯匯編文件的腳本 ;
all: led.o @arm-linux-ld -Tled.lds -o led.elf $^@arm-linux-objcopy -O binary led.elf led.binled.o : led.Sarm-linux-gcc -g -o $@ -c $^.PHONY: clean clean:rm *.o led.elf led.bin在 Makefile 的當前目錄 , 執(zhí)行 make 命令 , 會自動執(zhí)行 Makefile 腳本中的編譯命令 ;
四、CMake 引入
Makefile 在 Linux 下有其固定的編寫格式 , 在 Windows 下有另外一種編寫格式 , 不同的平臺的 Makefile 的編寫格式都不同 , 非常不利于跨平臺 ;
CMake 解決了上述 Makefile 跨平臺問題 , 使用 CMake 可以完美處理在不同平臺之間的 Makefile 不兼容的問題 ;
CMake 可以生成不同平臺的 Makefile 文件 ;
總結
以上是生活随笔為你收集整理的【CMake】CMake 引入 ( Android Studio 创建 Native C++ 工程 | C/C++ 源码编译过程 | Makefile 工具 | CMake 引入 )的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【鸿蒙 HarmonyOS】Abilit
- 下一篇: 【CMake】Android Studi