CMAKE工具學習
最近在學習各大物聯網平台的SDK包,發現其工程都使用了一種叫cmake的工具在管理程式碼。於是花了一天時間簡單學習了解了cmake工具,其目的是讓自己能讀懂使用該工具管理的程式碼,並能簡單使用該工具管理我自己的工程程式碼。CMAKE與Makefile類似,是一種程式碼編譯工具,cmake解決了Makefile跨平台編譯難的問題,其語法規則比較簡單且易於上手,下面是作者初學cmake的筆記
一、CMAKE下載
cmake下載路徑可以選擇下面兩個,具體的軟體版本請根據不同環境下載 作者的筆記是在linux64位環境
[GitHub]://github.com/Kitware/CMake/releases
[官網]://cmake.org/download/
下載後對壓縮文件解壓
tar -zxf cmake-3.16.6 |
二、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的最小版本
(VERSION 2.8) |
這行命令是可選的,我們可以不寫這句話,但在有些情況下,如果 CMakeLists.txt 文件中使用了一些高版本 cmake 特有的一些命令的時候,就需要加上這樣一行,提醒用戶升級到該版本之後再執行 cmake。
2、設置項目名稱
(demo) |
這行命令也是可選項,但最好在語法中都加上,它會引入兩個變數demo_BINARY_DIR和demo_SOURCE_DIR,並且cmake也會定義兩個等價的變數PROJECT_BINARY_DIR和PROJECT_SOURCE_DIR。
3、指定編譯包含的源文件
3.1 自動搜索目錄下的.c文件
(./ DIR_SRC) |
3.2 設置變數
(DIR_SRC demo.c) (DIR_SRC ${DIR_SRC} main.c) //set追加設置變數的值 |
變數後可接多個源文件
3.3 指定包含的源文件
(demo demo.c main.c) |
4、設置包含的目錄
(${PROJECT_SOURCE_DIR}/src) |
目錄下的源文件會分別被cmake執行
5、設置編譯類型
(demo ${DIR_SRC}) (demo ${DIR_SRC}) |
前者生成可執行文件 後者生成靜態庫
6、設置工程需要連接的庫文件
(demo fastsort) |
四、項目示例
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目錄
編譯過程中產生的中間文件將放在該目錄下面
mkdir build |
3.2 編譯源程式碼
進入build目錄並執行下面兩條指令
五、Linux下gdb簡介
1、cmake下的gdb
cmake把生成的可執行文件分成兩種模式,realease與debug,默認是realease模式,調試模式通過以下指令進入
cmake -DCMAKE_BUILD_TYPE=Debug .. |
或者在一級目錄下的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。
創作不易,白嫖不好,各位的支援和認可,就是我創作的最大動力,我們下篇文章見!
清風 | 文 【原創】
如果本篇部落格有任何錯誤,請批評指教,不勝感激 !