CMake構建學習筆記2-zlib庫的構建

charlee44發表於2024-08-24

目錄
  • 1. 概述
  • 2. 詳論
    • 2.1 設定構建目錄
    • 2.2 配置構建
    • 2.3 構建專案
    • 2.4 安裝專案
    • 2.5 清理構建目錄
  • 3. 總結

1. 概述

Zlib是一個資料壓縮庫,它提供了在記憶體中對資料進行壓縮和解壓縮的功能。這個庫非常泛用,除了直接使用這個庫之外,很多依賴庫都會間接依賴它。這裡就以Windows系統為例介紹一下如何透過CMake構建它。

2. 詳論

2.1 設定構建目錄

儘管CMake提供了GUI工具,但是不推薦透過GUI進行構建。原因很簡單,有很多構建選項需要我們自己控制,一個個去配置是很容易忘記自己配置了哪些選項的,總不能把配置的截圖儲存下來吧?因此還是使用指令碼比較合適。

在下載原始碼之後,進入原始碼目錄,會有一個CMakeLists.txt檔案,這個檔案就是用於CMake構建的專案檔案。在進行構建之前,需要設定一個單獨的目錄存放構建的中間檔案和結果檔案,方便與原始碼分開。通常的做法是在這個跟目錄中建立一個名為Build的目錄。

2.2 配置構建

接下來,使用如下命令來配置構建專案:

# 配置CMake  
cmake .. -G "$Generator" -A x64 -DCMAKE_CONFIGURATION_TYPES=RelWithDebInfo -DCMAKE_INSTALL_PREFIX="$InstallDir" -DZLIB_BUILD_EXAMPLES=OFF
  1. ..表示專案的根目錄是上一級目錄。
  2. -G $Generator的意思設定生成器,在Windows環境下一般使用MSVC進行構建,例如使用Visual Studio 2019進行構建,Generator就應該是"Visual Studio 16 2019"。
  3. -A x64指定架構為64位。
  4. 所有的構建配置專案以-D開頭,CMAKE_CONFIGURATION_TYPES是一個CMake內建變數,用於控制可用的配置型別,這裡使用的是RelWithDebInfo,也就是Release帶除錯資訊的型別。
  5. CMAKE_INSTALL_PREFIX也是一個內建的CMake變數,用於設定專案安裝的目錄,如果不設定的話,Linux系統下預設會安裝到"/usr/local",Windows系統下會安裝到"C:/Program Files/"。
  6. ZLIB_BUILD_EXAMPLES內建一個專案提供的一個配置項,表示不用構建專案自帶的案例程式。

越是大型專案,需要配置的構建項就越多。對於專案提供的配置項,可以在CMakeLists.txt中看到,例如:

option(ZLIB_BUILD_EXAMPLES "Enable Zlib Examples" ON)

如果不會看這些也不要緊,可以開啟CMake的GUI工具幫助我們輔助檢視。在GUI工具中會列出所有的CMake變數和專案配置項:

CMake變數和專案配置

2.3 構建專案

然後就是正式開始構建專案了:

# 構建階段,指定構建型別
cmake --build . --config RelWithDebInfo
  1. --build表示構建專案。
  2. .表示構建的結果放在當前目錄。
  3. --config RelWithDebInfo表示按照Release帶除錯資訊的型別進行構建。

2.4 安裝專案

最後是安裝專案。有的讀者包括筆者最開始會比較奇怪,dll也需要安裝的嗎?是的沒錯,需要安裝,而且最好把所有依賴庫安裝到一個目錄中,這樣便於引用和管理。

# 安裝階段,指定構建型別和安裝目標
cmake --build . --config RelWithDebInfo --target install

2.5 清理構建目錄

另外還有個指令是清理構建生成的檔案,不過使用的不是很多,手動刪除也行:

# 清理構建目錄
cmake --build . --target clean

3. 總結

以上大概就是構建一個C/C++依賴庫專案的過程了,不止是zlib,其他庫也可以按照這種方式進行構建,最大的區別就是不同的專案可能需要的配置項不同,讀者需要靈活掌握。

相關文章