使用 ServBay 進行二次編譯
ServBay 為 macOS 及 Windows 用戶提供完整且強大的本地網頁開發環境,內含多種豐富的軟體包與工具。除了 ServBay 預設安裝的版本外,開發者有時需根據特定需求進行二次編譯,例如:
- 為某個軟體包啟用特定的編譯選項。
- 新增 ServBay 預設未提供的模組或擴展(如全新 PHP 擴展或 PostgreSQL 模組)。
- 使用不同於 ServBay 預設版本的特定函式庫進行編譯。
- 對 ServBay 提供的軟體包進行客製化修改。
ServBay 提供所需的編譯環境及工具鏈,協助用戶輕鬆完成上述二次編譯任務。
進行二次編譯時,建議使用者具備基本的相關作業系統軟體編譯流程知識:
- macOS/Linux:
configure
、make
、make install
等 Unix/Linux 編譯工具鏈 - Windows: Visual Studio 建置系統、MSBuild、cmake 等編譯環境
前置條件
開始二次編譯前,請確保以下條件已滿足:
安裝 ServBay Development Library: 這是進行二次編譯的核心依賴。此套件包含 ServBay 環境所需的全部函式庫、標頭檔等開發資源。可於 ServBay 應用介面的軟體包面板找到並安裝。
安裝開發工具集:
macOS
安裝 Xcode Command Line Tools: macOS 提供的基本開發工具集,含編譯器(Clang)、連結器等必備工具。打開終端機,輸入以下指令安裝:
bashxcode-select --install
1若已安裝,系統會提示。
安裝額外編譯工具: 為編譯多數開源軟體,還須安裝
autoconf
、automake
、libtool
等工具。通常用 Homebrew 套件管理器安裝:bashbrew install autoconf automake libtool cmake
1若尚未安裝 Homebrew,請參考 Homebrew 官方網站指引安裝。
Windows
安裝 Visual Studio Build Tools 或 Visual Studio Community: Windows 平台須有 Microsoft Visual C++ 編譯器及建置工具。可採以下任一方式:
方式 1: Visual Studio Build Tools(推薦,體積較小)
- 下載並安裝 Visual Studio Build Tools
- 安裝過程選擇 "C++ build tools" 工作負載
- 務必包含下列組件:
- MSVC v143 - VS 2022 C++ x64/x86 建置工具
- Windows 11 SDK(最新版本)
- CMake 工具
方式 2: Visual Studio Community
- 下載並安裝 Visual Studio Community
- 安裝過程選擇 "使用 C++ 的桌面開發" 工作負載
- 務必包含 CMake 工具及 Windows SDK
安裝額外工具: 某些開源專案可能還需安裝:
- Git for Windows: 用於下載原始碼
- MSYS2 或 vcpkg: 管理 C/C++ 庫依賴
- Python: 部分建置腳本可能需要 Python
powershell# 使用 chocolatey 安裝額外工具(可選) choco install git cmake python msys2
1
2
設定編譯環境
安裝 ServBay Development Library 及其他必備工具後,須初始化編譯環境。主要是設定一系列環境變數,告訴編譯器及建置系統 ServBay 的函式庫、標頭檔及二進位檔的位置,使其可正確尋找依賴並連結。
依作業系統及架構,環境設定略有差異:
macOS
ServBay 針對您的 Mac CPU 架構分 Intel(x86_64)及 Apple Silicon(Arm64)。需依現行 ServBay Runtime 架構選擇相對應的環境初始化指令。
Windows
Windows 版 ServBay 支援 x64 架構,安裝於 C:\ServBay
目錄下。
檢查 ServBay Runtime 的 CPU 架構
macOS
可檢查 ServBay bin
目錄下任意執行檔的架構。例如,檢查 bison
:
bash
# 在終端機執行以下命令檢查
$ file /Applications/ServBay/bin/bison
/Applications/ServBay/bin/bison: Mach-O 64-bit executable arm64
1
2
3
2
3
bash
# 在終端機執行以下命令檢查
$ file /Applications/ServBay/bin/bison
/Applications/ServBay/bin/bison: Mach-O 64-bit executable x86_64
1
2
3
2
3
Windows
Windows 版 ServBay 目前僅支援 x64 架構。可於 PowerShell 檢查執行檔:
powershell
# 在 PowerShell 執行以下命令檢查
PS> Get-Command "C:\ServBay\bin\bison.exe" | Select-Object -ExpandProperty FileVersionInfo | Select-Object ProductName, FileDescription
1
2
2
或直接檢查檔案屬性確認架構資訊。
確認架構後,依結果選定對應的環境初始化腳本。
初始化編譯環境變數
依作業系統及架構,選用對應環境初始化腳本:
macOS
開啟新終端機視窗,將下列與 CPU 架構相符的腳本複製貼上執行。腳本會設定 ServBay 編譯環境所需路徑及標誌。
bash
# 設定 CPU 核心數,用於多線程編譯
CPU_NUMBER=$(sysctl -n hw.ncpu)
# ServBay 安裝基礎路徑
SERVBAY_BASE_FULL_PATH="/Applications/ServBay"
# 軟體包目錄名稱
SERVBAY_PACKAGE_DIR_NAME="package"
# 軟體包完整路徑
SERVBAY_PACKAGE_FULL_PATH="${SERVBAY_BASE_FULL_PATH}/${SERVBAY_PACKAGE_DIR_NAME}"
# ServBay 二進位檔路徑
SERVBAY_BIN_PATH="${SERVBAY_PACKAGE_FULL_PATH}/bin"
SERVBAY_SBIN_PATH="${SERVBAY_PACKAGE_FULL_PATH}/sbin"
# ServBay 設定檔路徑
SERVBAY_ETC_PATH="${SERVBAY_PACKAGE_FULL_PATH}/etc"
# ServBay 變數資料路徑
SERVBAY_VAR_PATH="${SERVBAY_PACKAGE_FULL_PATH}/var"
# ServBay Development Library 安裝路徑
SERVBAY_COMMON_PATH="${SERVBAY_PACKAGE_FULL_PATH}/common"
# ServBay Development Library 標頭檔路徑
SERVBAY_COMMON_INCLUDE_PATH="${SERVBAY_COMMON_PATH}/include"
# ServBay Development Library 函式庫路徑
SERVBAY_COMMON_LIB_PATH="${SERVBAY_COMMON_PATH}/lib"
SERVBAY_COMMON_LIBEXEC_PATH="${SERVBAY_COMMON_PATH}/libexec"
SERVBAY_COMMON_SHARE_PATH="${SERVBAY_COMMON_PATH}/share"
SERVBAY_COMMON_MAN_PATH="${SERVBAY_COMMON_PATH}/man"
SERVBAY_COMMON_DOC_PATH="${SERVBAY_COMMON_PATH}/doc"
# 當前建置目錄
SERVBAY_BUILD_DIR=$(pwd)
SERVBAY_BUILD_SRC_DIR=${SERVBAY_BUILD_DIR}/src
# OpenSSL 版本
OPENSSL_SELECTED_VERSION="3.2"
OPENSSL_VERSION="3.2.1"
# 建置目標作業系統最低版本
BUILD_OS_MIN_VERSION="12.00" # macOS Monterey 或更高
# 建置 CPU 架構標誌
BUILD_CPU_ARCH="-arch arm64"
BUILD_CPU_ARCH_CMAKE="arm64"
BUILD_MACOS_TARGET="" # Arm64 通常不需要 -target 標誌
# 設定 C 編譯器標誌:最佳化等級、最低 macOS 版本、架構
export CFLAGS="-Qunused-arguments -O3 -mmacosx-version-min=${BUILD_OS_MIN_VERSION} ${BUILD_CPU_ARCH} ${BUILD_MACOS_TARGET}"
# 設定連結器標誌:執行時函式庫搜尋(rpath)、函式庫搜尋路徑(-L)、最低 macOS 版本、架構
export LDFLAGS="-Wl,-rpath -Wl,${SERVBAY_COMMON_LIB_PATH} -L${SERVBAY_COMMON_LIB_PATH} -L${SERVBAY_PACKAGE_FULL_PATH} -mmacosx-version-min=${BUILD_OS_MIN_VERSION} ${BUILD_CPU_ARCH} ${BUILD_MACOS_TARGET}"
# 設定 C 預處理器及 CXX 編譯器標誌:標頭檔搜尋路徑(-I)
export CPPFLAGS="-I${SERVBAY_COMMON_INCLUDE_PATH}"
# 設定 C++ 編譯器標誌:同 CFLAGS
export CXXFLAGS="-Qunused-arguments -O3 -mmacosx-version-min=${BUILD_OS_MIN_VERSION} ${BUILD_CPU_ARCH} ${BUILD_MACOS_TARGET}"
# 設定可執行檔搜尋路徑:優先用 ServBay 的 bin/sbin 目錄
export PATH="${SERVBAY_BIN_PATH}:${SERVBAY_SBIN_PATH}:/usr/bin:/bin:/usr/sbin:/sbin:/Library/Apple/usr/bin"
# 設定 pkg-config 搜尋路徑:用於查找庫資訊
export PKG_CONFIG_PATH="${SERVBAY_COMMON_LIB_PATH}/pkgconfig"
# 指定 pkg-config 工具路徑
export PKG_CONFIG="${SERVBAY_BIN_PATH}/pkg-config"
# 設定 pkg-config 庫目錄
export PKG_CONFIG_LIBDIR="${SERVBAY_COMMON_LIB_PATH}/pkgconfig"
# 系統及 Homebrew 的 bin/sbin 路徑加在 PATH 後,備用
export PATH=$PATH:"/usr/local/bin:/usr/local/sbin"
export PATH=$PATH:"/opt/homebrew/bin/" # Homebrew 預設安裝路徑
# 增加 OpenSSL 的函式庫與標頭檔路徑到 LDFLAGS 與 CPPFLAGS
export LDFLAGS="-L${SERVBAY_COMMON_PATH}/openssl/${OPENSSL_SELECTED_VERSION}/lib ${LDFLAGS}"
export CPPFLAGS="-I${SERVBAY_COMMON_PATH}/openssl/${OPENSSL_SELECTED_VERSION}/include ${CPPFLAGS}"
# 增加 OpenSSL 的 pkgconfig 路徑
export PKG_CONFIG_PATH="${PKG_CONFIG_PATH}:${SERVBAY_COMMON_PATH}/openssl/${OPENSSL_SELECTED_VERSION}/lib/pkgconfig"
export PKG_CONFIG_LIBDIR="${PKG_CONFIG_LIBDIR}:${SERVBAY_COMMON_PATH}/openssl/${OPENSSL_SELECTED_VERSION}/lib/pkgconfig"
# 完成環境變數設定後,現在可在此終端窗口進行編譯操作
echo "ServBay Arm64 編譯環境已設定。"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
bash
# 設定 CPU 核心數,用於多線程編譯
CPU_NUMBER=$(sysctl -n hw.ncpu)
# ServBay 安裝基礎路徑
SERVBAY_BASE_FULL_PATH="/Applications/ServBay"
# 軟體包目錄名稱
SERVBAY_PACKAGE_DIR_NAME="package"
# 軟體包完整路徑
SERVBAY_PACKAGE_FULL_PATH="${SERVBAY_BASE_FULL_PATH}/${SERVBAY_PACKAGE_DIR_NAME}"
# ServBay 二進位檔路徑
SERVBAY_BIN_PATH="${SERVBAY_PACKAGE_FULL_PATH}/bin"
SERVBAY_SBIN_PATH="${SERVBAY_PACKAGE_FULL_PATH}/sbin"
# ServBay 設定檔路徑
SERVBAY_ETC_PATH="${SERVBAY_PACKAGE_FULL_PATH}/etc"
# ServBay 變數資料路徑
SERVBAY_VAR_PATH="${SERVBAY_PACKAGE_FULL_PATH}/var"
# ServBay Development Library 安裝路徑
SERVBAY_COMMON_PATH="${SERVBAY_PACKAGE_FULL_PATH}/common"
# ServBay Development Library 標頭檔路徑
SERVBAY_COMMON_INCLUDE_PATH="${SERVBAY_COMMON_PATH}/include"
# ServBay Development Library 函式庫路徑
SERVBAY_COMMON_LIB_PATH="${SERVBAY_COMMON_PATH}/lib"
SERVBAY_COMMON_LIBEXEC_PATH="${SERVBAY_COMMON_PATH}/libexec"
SERVBAY_COMMON_SHARE_PATH="${SERVBAY_COMMON_PATH}/share"
SERVBAY_COMMON_MAN_PATH="${SERVBAY_COMMON_PATH}/man"
SERVBAY_COMMON_DOC_PATH="${SERVBAY_COMMON_PATH}/doc"
# 當前建置目錄
SERVBAY_BUILD_DIR=$(pwd)
SERVBAY_BUILD_SRC_DIR=${SERVBAY_BUILD_DIR}/src
# OpenSSL 版本資訊
OPENSSL_SELECTED_VERSION="1.1.1u"
OPENSSL_VERSION="1.1.1u"
# 建置目標作業系統最低版本
BUILD_OS_MIN_VERSION="12.00" # macOS Monterey 或更高
# 建置 CPU 架構標誌
BUILD_CPU_ARCH="-arch x86_64"
BUILD_CPU_ARCH_CMAKE="x86_64"
# 建置目標平台標誌 (Intel 晶片常需指定)
BUILD_MACOS_TARGET="-target x86_64-apple-macos${BUILD_OS_MIN_VERSION}"
# 設定 C 編譯器標誌:最佳化等級、最低 macOS 版本、架構、目標平台
export CFLAGS="-Qunused-arguments -O3 -mmacosx-version-min=${BUILD_OS_MIN_VERSION} ${BUILD_CPU_ARCH} ${BUILD_MACOS_TARGET}"
# 設定連結器標誌:執行時函式庫搜尋(rpath)、函式庫搜尋路徑(-L)、最低 macOS 版本、架構、目標平台
export LDFLAGS="-Wl,-rpath -Wl,${SERVBAY_COMMON_LIB_PATH} -L${SERVBAY_COMMON_LIB_PATH} -L${SERVBAY_PACKAGE_FULL_PATH} -mmacosx-version-min=${BUILD_OS_MIN_VERSION} ${BUILD_CPU_ARCH} ${BUILD_MACOS_TARGET}"
# 設定 C 預處理器及 CXX 編譯器標誌:標頭檔搜尋路徑(-I)
export CPPFLAGS="-I${SERVBAY_COMMON_INCLUDE_PATH}"
# 設定 C++ 編譯器標誌:同 CFLAGS
export CXXFLAGS="-Qunused-arguments -O3 -mmacosx-version-min=${BUILD_OS_MIN_VERSION} ${BUILD_CPU_ARCH} ${BUILD_MACOS_TARGET}"
# 設定可執行檔搜尋路徑:優先用 ServBay 的 bin/sbin 目錄
export PATH="${SERVBAY_BIN_PATH}:${SERVBAY_SBIN_PATH}:/usr/bin:/bin:/usr/sbin:/sbin:/Library/Apple/usr/bin"
# 設定 pkg-config 搜尋路徑:用於查找庫資訊
export PKG_CONFIG_PATH="${SERVBAY_COMMON_LIB_PATH}/pkgconfig"
# 指定 pkg-config 工具路徑
export PKG_CONFIG="${SERVBAY_BIN_PATH}/pkg-config"
# 設定 pkg-config 庫目錄
export PKG_CONFIG_LIBDIR="${SERVBAY_COMMON_LIB_PATH}/pkgconfig"
# 系統及 Homebrew 的 bin/sbin 路徑加在 PATH 後,備用
export PATH=$PATH:"/usr/local/bin:/usr/local/sbin"
export PATH=$PATH:"/opt/homebrew/bin/" # Homebrew 預設安裝路徑
# 增加 OpenSSL 的函式庫與標頭檔路徑到 LDFLAGS 與 CPPFLAGS
export LDFLAGS="-L${SERVBAY_COMMON_PATH}/openssl/${OPENSSL_SELECTED_VERSION}/lib ${LDFLAGS}"
export CPPFLAGS="-I${SERVBAY_COMMON_PATH}/openssl/${OPENSSL_SELECTED_VERSION}/include ${CPPFLAGS}"
# 增加 OpenSSL 的 pkgconfig 路徑
export PKG_CONFIG_PATH="${PKG_CONFIG_PATH}:${SERVBAY_COMMON_PATH}/openssl/${OPENSSL_SELECTED_VERSION}/lib/pkgconfig"
export PKG_CONFIG_LIBDIR="${PKG_CONFIG_LIBDIR}:${SERVBAY_COMMON_PATH}/openssl/${OPENSSL_SELECTED_VERSION}/lib/pkgconfig"
# 完成環境變數設定後,現在可在此終端窗口進行編譯操作
echo "ServBay x86_64 編譯環境已設定。"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
Windows
於 PowerShell 或 Developer Command Prompt 設定環境變數,下列腳本適用 Windows x64 架構:
powershell
# 設定 CPU 核心數,用於多線程編譯
$CPU_NUMBER = (Get-WmiObject -Class Win32_Processor).NumberOfLogicalProcessors
# ServBay 安裝基礎路徑 (Windows)
$SERVBAY_BASE_FULL_PATH = "C:\ServBay"
# 軟體包目錄名稱
$SERVBAY_PACKAGE_DIR_NAME = "package"
# 軟體包完整路徑
$SERVBAY_PACKAGE_FULL_PATH = "${SERVBAY_BASE_FULL_PATH}\${SERVBAY_PACKAGE_DIR_NAME}"
# ServBay 二進位檔路徑
$SERVBAY_BIN_PATH = "${SERVBAY_PACKAGE_FULL_PATH}\bin"
$SERVBAY_SBIN_PATH = "${SERVBAY_PACKAGE_FULL_PATH}\sbin"
# ServBay 設定檔路徑
$SERVBAY_ETC_PATH = "${SERVBAY_PACKAGE_FULL_PATH}\etc"
# ServBay 變數資料路徑
$SERVBAY_VAR_PATH = "${SERVBAY_PACKAGE_FULL_PATH}\var"
# ServBay Development Library 安裝路徑
$SERVBAY_COMMON_PATH = "${SERVBAY_PACKAGE_FULL_PATH}\common"
# ServBay Development Library 標頭檔路徑
$SERVBAY_COMMON_INCLUDE_PATH = "${SERVBAY_COMMON_PATH}\include"
# ServBay Development Library 函式庫路徑
$SERVBAY_COMMON_LIB_PATH = "${SERVBAY_COMMON_PATH}\lib"
$SERVBAY_COMMON_LIBEXEC_PATH = "${SERVBAY_COMMON_PATH}\libexec"
$SERVBAY_COMMON_SHARE_PATH = "${SERVBAY_COMMON_PATH}\share"
$SERVBAY_COMMON_DOC_PATH = "${SERVBAY_COMMON_PATH}\doc"
# 當前建置目錄
$SERVBAY_BUILD_DIR = Get-Location
$SERVBAY_BUILD_SRC_DIR = "${SERVBAY_BUILD_DIR}\src"
# OpenSSL 版本 (Windows)
$OPENSSL_SELECTED_VERSION = "3.2"
$OPENSSL_VERSION = "3.2.1"
# Windows 建置設定
$BUILD_PLATFORM = "x64"
$BUILD_CONFIG = "Release"
# 設定環境變數
$env:SERVBAY_BASE_FULL_PATH = $SERVBAY_BASE_FULL_PATH
$env:SERVBAY_COMMON_PATH = $SERVBAY_COMMON_PATH
$env:SERVBAY_COMMON_INCLUDE_PATH = $SERVBAY_COMMON_INCLUDE_PATH
$env:SERVBAY_COMMON_LIB_PATH = $SERVBAY_COMMON_LIB_PATH
# 設定 PATH 環境變數:優先使用 ServBay 的 bin/sbin 目錄
$env:PATH = "${SERVBAY_BIN_PATH};${SERVBAY_SBIN_PATH};$env:PATH"
# 設定編譯器相關環境變數
$env:INCLUDE = "${SERVBAY_COMMON_INCLUDE_PATH};$env:INCLUDE"
$env:LIB = "${SERVBAY_COMMON_LIB_PATH};$env:LIB"
$env:LIBPATH = "${SERVBAY_COMMON_LIB_PATH};$env:LIBPATH"
# 設定 pkg-config 相關變數(如可用時)
$env:PKG_CONFIG_PATH = "${SERVBAY_COMMON_LIB_PATH}\pkgconfig"
# 增加 OpenSSL 的函式庫與標頭檔路徑
$env:INCLUDE = "${SERVBAY_COMMON_PATH}\openssl\${OPENSSL_SELECTED_VERSION}\include;$env:INCLUDE"
$env:LIB = "${SERVBAY_COMMON_PATH}\openssl\${OPENSSL_SELECTED_VERSION}\lib;$env:LIB"
# 設定 CMAKE 相關變數
$env:CMAKE_PREFIX_PATH = $SERVBAY_COMMON_PATH
$env:CMAKE_INSTALL_PREFIX = $SERVBAY_COMMON_PATH
# 完成環境變數設定
Write-Host "ServBay Windows x64 編譯環境已設定。"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
若使用 Developer Command Prompt,也可用批次檔:
batch
@echo off
REM 設定 ServBay Windows 編譯環境
REM ServBay 安裝基礎路徑
set SERVBAY_BASE_FULL_PATH=C:\ServBay
set SERVBAY_PACKAGE_FULL_PATH=%SERVBAY_BASE_FULL_PATH%\package
REM ServBay 路徑設定
set SERVBAY_BIN_PATH=%SERVBAY_PACKAGE_FULL_PATH%\bin
set SERVBAY_COMMON_PATH=%SERVBAY_PACKAGE_FULL_PATH%\common
set SERVBAY_COMMON_INCLUDE_PATH=%SERVBAY_COMMON_PATH%\include
set SERVBAY_COMMON_LIB_PATH=%SERVBAY_COMMON_PATH%\lib
REM OpenSSL 版本
set OPENSSL_SELECTED_VERSION=3.2
REM 設定環境變數
set PATH=%SERVBAY_BIN_PATH%;%PATH%
set INCLUDE=%SERVBAY_COMMON_INCLUDE_PATH%;%SERVBAY_COMMON_PATH%\openssl\%OPENSSL_SELECTED_VERSION%\include;%INCLUDE%
set LIB=%SERVBAY_COMMON_LIB_PATH%;%SERVBAY_COMMON_PATH%\openssl\%OPENSSL_SELECTED_VERSION%\lib;%LIB%
set CMAKE_PREFIX_PATH=%SERVBAY_COMMON_PATH%
echo ServBay Windows 編譯環境已設定完成。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
重要提醒: 這些環境變數只在目前終端機會話有效。若關閉終端機或啟動新視窗,需重新執行對應腳本設定編譯環境。
編譯示例
完成編譯環境設定後,現在能在終端機下載原始碼並進行編譯。以下提供幾個常見跨平台編譯範例。
編譯 ImageMagick
ImageMagick 是強大的圖像處理函式庫,也是 PHP imagick
擴展的必要依賴。ServBay 已預設安裝 ImageMagick,通常無須手動編譯。此範例僅用於說明如何用 ServBay 環境編譯專案流程。
macOS / Linux
下載 ImageMagick 原始碼並解壓縮:
bash# 請自行替換為最新版號 wget https://imagemagick.org/archive/releases/ImageMagick-7.1.1-33.tar.gz tar zxvf ImageMagick-7.1.1-33.tar.gz cd ImageMagick-7.1.1-33
1
2
3
4執行
./configure
腳本: 利用先前設好的環境變數,執行 configure 腳本。--prefix
、--libdir
、--includedir
等選項指定安裝路徑,統一指向 ServBay Development Library 的共用目錄${SERVBAY_COMMON_PATH}
及相關子目錄,以利編譯產生的庫及標頭檔供 ServBay 其他軟體(如 PHPimagick
擴展)使用。其他選項則根據 ImageMagick 配置需求設定。bash./configure \ --prefix=${SERVBAY_COMMON_PATH} \ --libdir=${SERVBAY_COMMON_LIB_PATH} \ --includedir=${SERVBAY_COMMON_INCLUDE_PATH} \ --oldincludedir=${SERVBAY_COMMON_INCLUDE_PATH} \ --bindir=${SERVBAY_BIN_PATH} \ --sbindir=${SERVBAY_SBIN_PATH} \ --sysconfdir=${SERVBAY_ETC_PATH} \ --datarootdir=${SERVBAY_COMMON_SHARE_PATH} \ --enable-osx-universal-binary=no \ --disable-silent-rules \ --disable-opencl \ --enable-shared \ --enable-static \ --with-freetype=yes \ --with-gvc=no \ --with-modules \ --with-webp=yes \ --with-heic=no \ --without-gslib \ --with-fpx=no \ --without-openexexr \ --with-raw=yes \ --without-lqr \ --without-djvu \ --without-fftw \ --without-pango \ --without-wmf \ --without-x \ --with-gs-font-dir=${SERVBAY_COMMON_SHARE_PATH}/ghostscript/10.02.1/Resource/Font
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30執行
make
及make install
:make
命令根據設置編譯可執行檔與庫,-j ${CPU_NUMBER}
參數用多核心加速。make install
命令將編譯完成檔案安裝至--prefix
指定的 ServBay Development Library 目錄下。bashmake -j ${CPU_NUMBER} make install
1
2
Windows
於 Windows 平台,ImageMagick 通常需用 Visual Studio 或 CMake 編譯。因其建置流程較複雜,建議採用 CMake 方式:
下載 ImageMagick 原始碼:
powershell# 用 curl 或瀏覽器下載 curl -O https://imagemagick.org/archive/releases/ImageMagick-7.1.1-33.tar.gz # 解壓(需安裝 7zip 或同類工具) tar -xzf ImageMagick-7.1.1-33.tar.gz cd ImageMagick-7.1.1-33
1
2
3
4
5使用 CMake 配置(於 Developer Command Prompt 或 PowerShell):
powershell# 建置目錄 mkdir builddir cd builddir # CMake 配置專案 cmake .. ` -DCMAKE_INSTALL_PREFIX="$env:SERVBAY_COMMON_PATH" ` -DCMAKE_BUILD_TYPE=Release ` -DBUILD_SHARED_LIBS=ON ` -DMAGICKCORE_QUANTUM_DEPTH=16 ` -DMAGICKCORE_HDRI_ENABLE=OFF ` -DWITH_BZLIB=ON ` -DWITH_ZLIB=ON ` -DWITH_PNG=ON ` -DWITH_JPEG=ON ` -DWITH_TIFF=ON ` -DWITH_FREETYPE=ON ` -DWITH_WEBP=ON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18編譯與安裝:
powershell# 編譯 cmake --build . --config Release --parallel $CPU_NUMBER # 安裝 cmake --install . --config Release
1
2
3
4
使用 cmake 編譯軟體包
若軟體包採用 cmake
建置系統,編譯流程於各平台較一致。以下以 protobuf
(Protocol Buffers) 為例:
- 下載 protobuf 原始碼並進入目錄。
macOS / Linux
使用
cmake
配置專案:-S .
指定原始碼目錄為當前,-B builddir
指建置檔於builddir
。-DCMAKE_INSTALL_PREFIX
等選項如 Autotools 的--prefix
,指定安裝至 ServBay Development Library 目錄。其他-D
選項為 protobuf 特定設定。-DCMAKE_MACOSX_RPATH=1
及-DCMAKE_INSTALL_RPATH
確保所編譯的庫能正確找到 ServBay 其他庫。bash# 假設已於 protobuf 原始碼目錄 cmake -S . -B builddir \ -DCMAKE_INSTALL_PREFIX=${SERVBAY_COMMON_PATH} \ -DCMAKE_INSTALL_LIBDIR=${SERVBAY_COMMON_LIB_PATH} \ -DCMAKE_INSTALL_INCLUDEDIR=${SERVBAY_COMMON_INCLUDE_PATH} \ -DCMAKE_INSTALL_BINDIR=${SERVBAY_BIN_PATH} \ -DCMAKE_INSTALL_SBINDIR=${SERVBAY_SBIN_PATH} \ -DCMAKE_INSTALL_SYSCONFDIR=${SERVBAY_ETC_PATH} \ -DCMAKE_INSTALL_DATAROOTDIR=${SERVBAY_COMMON_SHARE_PATH} \ -DCMAKE_MACOSX_RPATH=1 \ -DCMAKE_INSTALL_RPATH=${SERVBAY_COMMON_LIB_PATH} \ -DCMAKE_BUILD_WITH_INSTALL_RPATH=TRUE \ -DCMAKE_PREFIX_PATH=${SERVBAY_COMMON_PATH} \ -DBUILD_SHARED_LIBS=ON \ -Dprotobuf_BUILD_LIBPROTOC=ON \ -Dprotobuf_BUILD_SHARED_LIBS=ON \ -Dprotobuf_INSTALL_EXAMPLES=OFF \ -Dprotobuf_BUILD_TESTS=OFF \ -Dprotobuf_ABSL_PROVIDER=package \ -Dprotobuf_JSONCPP_PROVIDER=module \ -DCMAKE_CXX_STANDARD=17
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21執行
cmake --build
及cmake --install
:cmake --build builddir
於builddir
執行編譯,cmake --install builddir
把編譯好的檔案安裝至指定 ServBay Development Library 目錄。bashcmake --build builddir -j ${CPU_NUMBER} cmake --install builddir
1
2
Windows
使用
cmake
配置專案(於 PowerShell 或 Developer Command Prompt):powershell# 假設已於 protobuf 原始碼目錄 cmake -S . -B builddir ` -DCMAKE_INSTALL_PREFIX="$env:SERVBAY_COMMON_PATH" ` -DCMAKE_BUILD_TYPE=Release ` -DCMAKE_PREFIX_PATH="$env:SERVBAY_COMMON_PATH" ` -DBUILD_SHARED_LIBS=ON ` -Dprotobuf_BUILD_LIBPROTOC=ON ` -Dprotobuf_BUILD_SHARED_LIBS=ON ` -Dprotobuf_INSTALL_EXAMPLES=OFF ` -Dprotobuf_BUILD_TESTS=OFF ` -Dprotobuf_MSVC_STATIC_RUNTIME=OFF ` -DCMAKE_CXX_STANDARD=17
1
2
3
4
5
6
7
8
9
10
11
12編譯與安裝:
powershell# 編譯 cmake --build builddir --config Release --parallel $CPU_NUMBER # 安裝 cmake --install builddir --config Release
1
2
3
4
編譯 PHP 模組
若須為 ServBay 內特定版本 PHP 編譯額外擴展模組(如 swoole
、redis
、mongodb
等),請參考專門文件:
編譯 PostgreSQL 模組
若需為 ServBay 內特定版本 PostgreSQL 編譯額外模組,請參考專門文件:
總結
透過 ServBay Development Library 及完善環境變數設置,開發者能輕鬆在 macOS 與 Windows 平台進行軟體包的二次編譯與客製。本方案極大提升彈性,得以因應專案所需或套用最新函式庫版本。
關鍵重點
- 跨平台支援:ServBay 現支援 macOS、Windows 雙平台編譯環境
- 路徑差異:注意安裝路徑(macOS:
/Applications/ServBay
,Windows:C:\ServBay
) - 工具鏈不同:macOS 用 Xcode Command Line Tools,Windows 用 Visual Studio Build Tools
- 環境參數:視平台選擇相對應的環境設定腳本
注意事項
- 編譯前請詳細閱讀軟體包官方編譯指南
- 依目標平台特性調整配置及步驟
- Windows 平台建議優先採 CMake 建置系統
- 部分開源軟體於不同平台編譯時依賴及流程可能不同
依本文件指引,您將能順利於 macOS 與 Windows 雙平台完成 ServBay 環境下的軟體包編譯任務。