###### tags: `CPP` `Arduino`
# 16 製作程式庫分享給大家使用
現在我們已經製作了一個好用的 `LED` 類別, 但是有一個小問題, 就是這個類別是跟程式綁在一起的, 如果我們希望可以在別的程式中使用這個 `LED` 類別, 或者分享給其他人使用, 是不是就要把整個程式給別人, 或是將 `LED` 定義的部分複製讓別人貼到他的程式中呢?
C++ 允許你將可重複利用的程式碼製作成程式庫的形式, 並在需要用到此程式庫的地方匯入, 這樣就不需要在所有需要相同功能的程式中都出現一份同樣的程式碼。以下我們就一步一步來試看看。
## 使用分離的檔案共用程式碼
要共用程式碼最簡單的一種方式就是在專案的資料夾中使用分離的檔案。以我們的例子來說, 就可以把 `LED` 類別的定義放在單獨的檔案中:
1. 請按右上角向下的箭頭按鈕:
![](https://i.imgur.com/O997ome.png)
執行『**新增標籤**』指令。
1. 幫新檔案取名為 "led.h" 後按確定:
![](https://i.imgur.com/RUgSIgj.png)
1. 把 `LED` 類別的定義整個**搬到**新建好的 led.h 檔中:
![](https://i.imgur.com/0iU8KSq.png)
1. 在原程式檔中的最上方加入以下這行前置處理器的指令:
![](https://i.imgur.com/mbadsOx.png)
這個指令會告訴前置處理器在處理程式碼之前, 先在這個位置把 led.h 檔案的內容置入, 實際的效果就跟原本把 `LED` 類別的定義放在這裡是一樣的。
:::info
這種要被置入程式的檔案因為都會在程式的一開頭用前置處理器的指令置入, 讓這些前置處理器的指令看起來很像是固定的表頭 (header), 所以這種檔案就稱為**表頭檔 (header files)**, 也有人稱**標頭檔**, 也因此檔案名稱慣例上都使用 ".h" 作為副檔名, 代表 "**h**eader" 之意。有的人也會用 ".inc" 表示 ""**inc**lude" 的意思。
:::
1. 重新上傳程式。
如果要分享這個類別給其他人使用, 就只要提供 led.h 檔, 並透過『**草稿碼/加入檔案**』將 led.h 加入專案, 然後在程式中使用前置處理器指令置入該檔案即可, 就像是上面所做的一樣。
## 包裝成程式庫
你也可以把要分享的程式檔包裝成 Arduino 的程式庫, 實際上就是把相關檔案放到一個資料夾中, 只要傳遞這個資料夾壓縮後的 ZIP 檔, 就可以透過 Arduino IDE 的**程式庫管理員**安裝到他的環境中使用。我們先來看怎麼包裝成程式庫:
1. 先使用檔案總管建立一個新資料夾 LED, 並把 led.h 搬移到剛剛建立的資料夾內:
![](https://i.imgur.com/G8FqE89.png)
1. 切換到 led.h 頁次, 按右上角的向下鈕後執行『**刪除**』命令:
![](https://i.imgur.com/WhUEQQ0.png)
按**確定**:
![](https://i.imgur.com/F83p78Q.png)
1. 執行『**草稿碼/匯入程式庫/加入.ZIP 程式庫**』命令:
![](https://i.imgur.com/Wctmn8p.png)
選取剛剛建立的 LED 資料夾後按**開啟**:
![](https://i.imgur.com/qXXxG5w.png)
就會看到已成功加入程式庫的訊息:
![](https://i.imgur.com/CYCR27P.png)
:::info
你也可以把 LED 資料夾壓成一個壓縮檔, 並選取這個壓縮檔。
:::
1. 修改前置處理器的指令:
![](https://i.imgur.com/oZJXrce.png)
把剛剛的 "led.h" 更改為 "<led.h>", 使用角括號表示是要從 Arduino IDE 的程式庫區找尋並置入檔案, 之前以英文雙引號標示則是從專案程式檔所在的資料夾找尋要置入的檔案, 若找不到則會去 Arduino IDE 程式庫區找。
1. 重新上傳程式, 一樣可以正常運作。
## 為程式庫加入範例檔
單純分享程式庫檔案收到的人未必知道怎麼用, 最好是可以伴隨有範例程式, 像是我們剛剛的 twinkle 專案就是說明 `LED` 類別用法的範例, 我們可以把範例也包裝進程式庫檔, 方便其他人使用:
1. 請在 LED 資料夾下再建一層 "examples" 子資料夾, 並且把 twinkle 專案整個資料夾放進去:
![](https://i.imgur.com/6Z9qYu9.png)
1. 由於剛剛我們已經加入過 LED 程式庫, 若要更新程式庫, 必須先刪除後重新加入, 不過 Arduino IDE 的**程式庫管理員**只能加入程式庫, 沒有刪除的功能, 我們要自己手動刪除, 請切換到『文件/Arduino/libraries』路徑下:
![](https://i.imgur.com/tHUsdjZ.png)
刪除 LED 資料夾。
1. 重新安裝一次 LED 程式庫。
1. 展開『**檔案/範例/LED**』功能表, 就會看到 twinkle 專案已經變成範例了, 加入程式庫的就可以直接開啟範例:
![](https://i.imgur.com/kLik0TM.png)
這樣你的程式庫不僅可以分享給其他人使用, 還可以透過隨附的範例程式瞭解怎麼使用。