CMAKE工具學習

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

一、CMAKE下載

cmake下載路徑可以選擇下面兩個,具體的軟件版本請根據不同環境下載 作者的筆記是在linux64位環境
[GitHub]://github.com/Kitware/CMake/releases
[官網]://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。

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

    清風 | 文 【原創】

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