構建
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 檢視依賴的函式庫