C++構建工具-構建系統

辰令發表於2024-10-16

構建

CI/CD     
CI 這步,首先需要一個版本控制系統,當前最好用的就是 git流程:
     主線分支上設定靜態程式碼檢查,用來檢測每一筆提交的質量,比如命名規範等。
	 還會設定自動化單元測試,看守程式碼功能,並進行程式碼覆蓋率分析
       程式碼拉取功能;
	   構建
	   安裝包依賴項功能,依賴項需要自己在構建之前手動安裝好;
	   建立二進位制包功能,例如 Debian 包。
  CD,其自動化的把二進位制產物部署到測試或生成環境,執行整合測試和冒煙測試。
構建命令列 構建工具 構建系統 構建平臺

Gcc編譯

 g++是GCC下專門用於編譯C++專案的編譯器
   很少原始檔的時候
   
 原始檔--目標檔案--可執行檔案
     引用呼叫其他外部子程式	 
	 標頭檔案_include:
     函式庫檔案_lib:動態函式庫和靜態函式庫
	 可執行檔案_bin

Make編譯

 ./configure --prefix=/opt/librdkafka/bin
 make  
 make  install
     編譯完成的檔案放置到 檔案系統中
 
 makefile命令中就包含了呼叫gcc(也可以是別的編譯器)去編譯某個原始檔的命令。
 
 make工具可以看成是一個智慧的批處理工具,它本身並沒有編譯和連結的功能,
   而是用類似於批處理的方式—透過呼叫makefile檔案中使用者指定的命令來進行編譯和連結的

make僅編譯;
make install編譯並安裝;make clean刪除臨時檔案

比如程式碼:./configure --prefix=/usr,意思是將該軟體(bin,lib,include)安裝在 /usr 下面。
  同時--配置檔案安裝目錄 也可透過 --sys-config= 引數進行設定。
  (執行 make check 或 make test來進行一些測試)
make install 是安裝到 /usr/local/bin  /usr/local/lib  /usr/local/include
make install prefix=/usr/local/ 和 make install等價,都是安裝到 /usr/local/bin  /usr/local/lib /usr/local/include
make install prefix=/usr/ 是安裝到 /usr/bin  /usr/lib    /usr/include
make install prefix=/usr/local/ DESTDIR=/tmp/build,則編譯生成的檔案會被放置在:
      DESTDIR是指定一個目錄,讓make install按安裝目錄的樹形結構放置進去,比如:
     /tmp/build/usr/local/bin
     /tmp/build/usr/local/lib
     /tmp/build/usr/local/include

cmake

mkdir build && cd build
cmake ..
make	
  在執行cmake的過程中,會產生許多中間檔案。為了避免產生的中間檔案,汙染我們的工作目錄,就讓CMake在build中執行。
    執行cmake ..就是根據上層目錄編寫的CMakeLists.txt,進行執行,
	最總生成Makefile檔案,
	再執行make命令,自動編譯程式碼,生成可執行檔案
	
CMakelists.txt
    install用於指定在安裝時執行的規則。
	它可以用來安裝很多內容,可以包括目標二進位制、動態庫、靜態庫以及檔案、目錄、指令碼等
針對 C/C++ 程式,最常用的構建系統就是 cmake,其底層依賴 makefile,而最下層就是 gcc/g++。

其他編譯

 ros1 時我們主要使用 cmake ,以及基於 cmake 的 catkin 構建系統
ROS環境中的構建
 source /opt/ros/melodic/setup.bash
    src:源空間
    build:編譯空間
    devel:開發空間
    install:安裝空間
$ cd ~/catkin_ws #回到工作空間,catkin_make必須在工作空間下執行
$ catkin_make    #開始編譯
$ source ~/catkin_ws/devel/setup.bash #重新整理壞境 
 
 build 和 devel 資料夾由 catkin_make 命令自動建立;
 install 資料夾由 catkin_make install 命令自動建立
   catkin_make install 的作用是:
   建立一個可以執行,但不含原始碼的工程包,以便於給客戶等其他人使用,但同時不至於洩露原始碼的這麼一個作用

ROS2 
   colcon(CMake Order-of-Length CONstraints)是ROS2中用於構建、測試和分發工作區的構建工具。	

其他構建工具

  ninja 
  編譯工具Bazel 

構建後的內容

#include <pthread.h>

ls /usr/include |grep pthread
ldconfig -p | grep pthread	
 /etc/ld.so.conf
 ldd  檢視依賴的函式庫	 

相關文章