---
# System prepended metadata

title: C/C++ Third Library 安裝步驟
tags: [其他]

---

---
title: C/C++ Third Library 安裝步驟
tags: 其他
---

在介紹步驟前，需要先講解兩大概念

# 編譯器在編譯時到底做了甚麼

雖然搜尋一下就有很多介紹了，但是大致的概念一定要記得
也就是那四大步驟

- 預處理 Preprocessing
- 編譯 Compilation
- 組譯 Assembly
- 連結 Linking

# 如何在編譯時串起多個檔案

當一個專案被拆成很多部分，由多個團隊共同開發的時候
想要將這些檔案在編譯後連結起來，會是個非常複雜的問題
於是會需要寫出 MakeFile 來梳理這些流程
搭配使用 make 這個工具自動化的編譯、連結和測試等等
>Windows 中就是 Mingw 中的 mingw32-make.exe

但是當專案真的真的很大的時候，MakeFile 也會變得很難寫
於是就有了 Cmake 這個工具幫我們自動化產生 MakeFile
當然 Cmake 的文件就得要自己寫了

# 下載 Third party library 的 Source 時的簡單流程

## 1. CMake

首先，他們的 Source File 裡面一定可以找到一個 `CMakeLists.txt`

![](https://drive.google.com/uc?id=195NVEYPckCRX6w6pLYEJTW79qdCFXWcn&export=download)

這就是你在終端機下 cmake 指令時的檔案位置

但是不是單單的對該位置輸入 cmake
還需要指定編譯器的位置，還有輸出的資料夾位置(通常輸出的資料夾會叫 build)
用 cmake 的 GUI 可以比較快且方便的選擇

![](https://drive.google.com/uc?id=1TfdPHDGtLPWnqt2aBCbQH2eQaaiSbzj5&export=download)


下面是選 source 跟 build 資料夾的位置

![](https://drive.google.com/uc?id=1OAtHfvnWEIRXfH7PhKqH8bvOIHebHmC_&export=download)

然後底下的 Generate 按鈕按下去

![](https://drive.google.com/uc?id=1NgjrJmWM0eDDhFwTAmBP1-XwcuTIqZW6&export=download)

會跳出這個視窗，底下四個選項就是跟編譯器有關的選項
選第二個可以指定特定編譯器位置

![](https://drive.google.com/uc?id=11TC8oGVJ0uIJZlS8nV3jOSeB40SJMEAa&export=download)

而上面的選單是選擇你的 MakeFile 的類型，由於我們是用 Mingw 的編譯器
所以要選擇這個類型

![](https://drive.google.com/uc?id=1zbNIdjpRTwym6jzqmv5nF506_k7LV4hD&export=download)

按下 Next 會跑出剛剛選擇編譯器位置的選擇視窗

![](https://drive.google.com/uc?id=1XygjScj6TiRS1LFGTM8EG8ESEt8mZdjz&export=download)

最後按 Finish 就會成功產生 MakeFile 檔案

## 2. Make

前面完成後應該會在你的 build 資料夾內看到一個 Makefile 檔案
>要注意要選擇最上層的那個，那個才是最整合的 Makefile
>通常會直接位在 build 資料夾內

![](https://drive.google.com/uc?id=1CsSAvkF3AMO_jOi1Z6Db2WB2OcJ6JSVk&export=download)

此時在這個位置開啟終端機，下 `mingw32-make` 指令
也就是使用這個程式幫我們執行 Makefile 裡的指令
>上面也可以直接下 `make` ，只要把 mingw32-make.exe 的名字改成 make.exe 就好
>通常他會跟編譯器位在同個資料夾

執行完後，再下 `make install` 指令，結束後會看到產生一個 install 資料夾，這個資料夾內才是最後可以好好使用的資料

![](https://drive.google.com/uc?id=1lnlDWpMSyi-i7ilX7bDzHUuFCp1SmNi2&export=download)

如果沒有下這步的話，原 build 資料夾內的 include 是沒有標頭檔可以用的

![](https://drive.google.com/uc?id=1PIq47JpFDus4v3PI3wPCy18BhYf_c1a2&export=download)

install 資料夾內的才有，而到時候使用像是 CodeBlock 等 IDE
就是要把 install 內的 include 資料夾位置告訴 IDE

![](https://drive.google.com/uc?id=1xMvmkdYYf_PggUAWwPh-N2yGA8olmtPS&export=download)

Linker 的設定則是將這兩個資料夾的位置(和檔案)告訴 IDE
裡面是編譯好的 library 和 dll 檔

![](https://drive.google.com/uc?id=1KMYJ7oIxt4Mj5HmdCkLiW6wJaUuJFYUd&export=download)

# Refference

過程中查了太多的東西了，現在要寫成 MD 反而想不起來
但總之大致就是分成三項，以及其他的細項
依照底下的關鍵字就可以查到很多資料了

- 編譯器的四大步驟
    - 動態、靜態連結
    - gcc/g++ 參數 (-I, -l, -L...)
        - 上面的參數要注意一個是 "小寫L" 一個是 "大寫I"
    - Include Path 和 Link Path
- MakeFile
    - 用途和語法
- Cmake
    - 用途和語法

順便附上一些在寫這份時又發現很好的資料

- [5分钟理解make/makefile/cmake/nmake](https://zhuanlan.zhihu.com/p/111110992)

### P.S.

- 重新查詢了一次資料才發現好像很推薦要讀《程式設計師的自我修養》這本書，改天來去總圖找找
- 非常感謝有朋友需要幫忙，如果沒有的話就不會有契機寫出上面的內容


