CMAKE工具學習

清風(Breeze.Wu)發表於2020-06-07

近在學習各大物聯網平臺的SDK包,發現其工程都使用了一種叫cmake的工具在管理程式碼。於是花了一天時間簡單學習瞭解了cmake工具,其目的是讓自己能讀懂使用該工具管理的程式碼,並能簡單使用該工具管理我自己的工程程式碼。CMAKE與Makefile類似,是一種程式碼編譯工具,cmake解決了Makefile跨平臺編譯難的問題,其語法規則比較簡單且易於上手,下面是作者初學cmake的筆記

一、CMAKE下載

cmake下載路徑可以選擇下面兩個,具體的軟體版本請根據不同環境下載 作者的筆記是在linux64位環境
[GitHub]:https://github.com/Kitware/CMake/releases
[官網]:https://cmake.org/download/
下載後對壓縮檔案解壓

  • 1 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的最小版本

  • 1 cmake_minimum_required (VERSION 2.8)
  • 這行命令是可選的,我們可以不寫這句話,但在有些情況下,如果 CMakeLists.txt 檔案中使用了一些高版本 cmake 特有的一些命令的時候,就需要加上這樣一行,提醒使用者升級到該版本之後再執行 cmake。

    2、設定專案名稱

  • 1 project (demo)
  • 這行命令也是可選項,但最好在語法中都加上,它會引入兩個變數demo_BINARY_DIR和demo_SOURCE_DIR,並且cmake也會定義兩個等價的變數PROJECT_BINARY_DIR和PROJECT_SOURCE_DIR。

    3、指定編譯包含的原始檔

    3.1 自動搜尋目錄下的.c檔案

  • 1 aux_source_director (./ DIR_SRC)
  • 3.2 設定變數

  • 1 set (DIR_SRC demo.c)
  • 2 set (DIR_SRC ${DIR_SRC} main.c) //set追加設定變數的值
  • 變數後可接多個原始檔

    3.3 指定包含的原始檔

  • 1 add_library (demo demo.c main.c)
  • 4、設定包含的目錄

  • 1 include_directories (${PROJECT_SOURCE_DIR}/src)
  • 目錄下的原始檔會分別被cmake執行

    5、設定編譯型別

  • 1 add_executable (demo ${DIR_SRC})
  • 2 add_library (demo ${DIR_SRC})
  • 前者生成可執行檔案 後者生成靜態庫

    6、設定工程需要連線的庫檔案

  • 1 target_link_libraries (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目錄

    編譯過程中產生的中間檔案將放在該目錄下面

  • 1 mkdir build
  • 3.2 編譯原始碼

    進入build目錄並執行下面兩條指令

    五、Linux下gdb簡介

    1、cmake下的gdb

    cmake把生成的可執行檔案分成兩種模式,realease與debug,預設是realease模式,除錯模式通過以下指令進入

  • 1 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。

    創作不易,白嫖不好,各位的支援和認可,就是我創作的最大動力,我們下篇文章見!

    清風 | 文 【原創】

    如果本篇部落格有任何錯誤,請批評指教,不勝感激 !

    參考文件:
    [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

    相關文章