最近在學習各大物聯網平臺的SDK包,發現其工程都使用了一種叫cmake的工具在管理程式碼。於是花了一天時間簡單學習瞭解了cmake工具,其目的是讓自己能讀懂使用該工具管理的程式碼,並能簡單使用該工具管理我自己的工程程式碼。CMAKE與Makefile類似,是一種程式碼編譯工具,cmake解決了Makefile跨平臺編譯難的問題,其語法規則比較簡單且易於上手,下面是作者初學cmake的筆記
一、CMAKE下載
cmake下載路徑可以選擇下面兩個,具體的軟體版本請根據不同環境下載 作者的筆記是在linux64位環境
[GitHub]:https://github.com/Kitware/CMake/releases
[官網]:https://cmake.org/download/
下載後對壓縮檔案解壓
|
二、CMAKE安裝與解除安裝
1、./configure
初次配置會提示未安裝openssl,根據提示在cmakelist.txt中新增 set(CMAKE_USE_OPENSSL OFF)禁用openssl或者在當前環境下安裝openssl 作者採用了禁用openssl方案
出現下面提示表示cmake配置成功 可以使用make編譯原始碼
2、make 編譯安裝包
3、sudo make install
未用管理員身份安裝會提示以下錯誤
4、cmake --version 顯示出版本號表示安裝成功
5、cat install_manifest.txt | sudo xargs rm 解除安裝並刪除安裝的檔案
三、CMAKE語法規則
1、指定cmake的最小版本
|
這行命令是可選的,我們可以不寫這句話,但在有些情況下,如果 CMakeLists.txt 檔案中使用了一些高版本 cmake 特有的一些命令的時候,就需要加上這樣一行,提醒使用者升級到該版本之後再執行 cmake。
2、設定專案名稱
|
這行命令也是可選項,但最好在語法中都加上,它會引入兩個變數demo_BINARY_DIR和demo_SOURCE_DIR,並且cmake也會定義兩個等價的變數PROJECT_BINARY_DIR和PROJECT_SOURCE_DIR。
3、指定編譯包含的原始檔
3.1 自動搜尋目錄下的.c檔案
|
3.2 設定變數
|
3.3 指定包含的原始檔
|
4、設定包含的目錄
|
目錄下的原始檔會分別被cmake執行
5、設定編譯型別
|
前者生成可執行檔案 後者生成靜態庫
6、設定工程需要連線的庫檔案
|
四、專案示例
1、一級目錄下CMakeLists.txt程式碼
cmake_minimum_required(VERSION 2.8)
project(demo)
include_directories(${PROJECT_SOURCE_DIR}/src)
add_subdirectory(src)
set(DIR_SRC demo.c)
add_executable(demo ${DIR_SRC})
target_link_libraries(demo fastsort)
2、二級目錄(src)下CMakeLists.txt程式碼
aux_source_directory(. DIR_SRC)
add_library(fastsort ${DIR_SRC})
3、編譯過程
3.1 在一級目錄下新建build目錄
編譯過程中產生的中間檔案將放在該目錄下面
|
3.2 編譯原始碼
進入build目錄並執行下面兩條指令
五、Linux下gdb簡介
1、cmake下的gdb
cmake把生成的可執行檔案分成兩種模式,realease與debug,預設是realease模式,除錯模式通過以下指令進入
|
或者在一級目錄下的CMakeLists.txt檔案中加入set(CMAKE_BUILD_TYPE Debug CACHE STRING "set build type to debug")or set(CMAKE_BUILD_TYPE "Debug")
2、gdb常用語法
2.1 gdb file
file為可執行檔案,進入gdb環境。
2.2 (gdb)list(l) n | list 函式名
檢視原始碼,n為需要顯示程式碼行數,每次顯示10行。
2.3 (gdb)break(b) n | break 函式名
設定斷點,n為原始碼的行號。
2.4 (gdb)delete n | delete 函式名 | delete breakpoints
刪除斷點,n為原始碼的行號,最後一個為刪除所有斷點。
2.5 (gdb)info breakpoints(b)
顯示當前程式的所有斷點。
2.6 (gdb)start
開始執行程式並停在main函式開始處。
2.7 (gdb)run(r)
開始執行程式並停在斷點處。
2.8 (gdb)next(n)
執行下一行語句,不進入函式。
2.9 (gdb)step(s)
執行下一行語句,遇到函式時進入函式。
2.10 (gdb)continue(c)
繼續執行程式,直到遇到斷點。
2.11 (gdb)until | until n
執行到退出迴圈體。
2.12 (gdb)finish
執行到函式返回 並列印函式返回時的堆疊地址和返回值及引數等資訊。
2.13 (gdb)print 變數名
列印變數的值。
2.14 (gdb)quit
退出gdb。
創作不易,白嫖不好,各位的支援和認可,就是我創作的最大動力,我們下篇文章見!
清風 | 文 【原創】
如果本篇部落格有任何錯誤,請批評指教,不勝感激 !
參考文件:
[cmake語法規則]:https://blog.csdn.net/afei__/article/details/81201039?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase
[debug]:https://www.cnblogs.com/sunshine1218/p/12520988.html or https://www.cnblogs.com/jingzhishen/p/3783499.html