編譯 QT 紀錄

有時會因為執行某些程式的需求,需要最新版本的 QT,而系統本身的套件庫並尚未更新到所需的新版本,此時就需要去抓最新版本的 QT 回來,自行編譯來用。

目前 QT 最新版本已到 6.10.1 ,以下為依據 QT 官方網站提供的說明(網址:https://wiki.qt.io/Building_Qt_6_from_Git)做參考,來進行抓取原始碼與編譯。

  1. 安裝編譯時會用到的工具程式(套件):
  2. sudo apt install -y \
        build-essential ninja-build perl python3 git \
        libgl1-mesa-dev libx11-dev libxext-dev libxfixes-dev \
        libxi-dev libxrender-dev libxcb1-dev libxcb-glx0-dev \
        libxcb-keysyms1-dev libxcb-image0-dev libxcb-shm0-dev \
        libxcb-icccm4-dev libxcb-sync-dev libxcb-xfixes0-dev \
        libxcb-shape0-dev libxcb-randr0-dev libxcb-render-util0-dev \
        libxcb-util-dev libxcb-xinerama0-dev libxkbcommon-dev \
        libfontconfig1-dev libfreetype6-dev libssl-dev \
        libzstd-dev libdbus-1-dev \
        bison flex gperf python3 pkg-config \
        libdrm-dev libnss3-dev libxss-dev libxtst-dev \
        libxcomposite-dev libxcursor-dev libxdamage-dev \
        libgbm-dev libasound2-dev libpci-dev libpulse-dev libudev-dev \
        libxkbfile-dev libxshmfence-dev \
        lld
    
    
       curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
       sudo apt-get install -y nodejs
    
    
  3. 下載 Qt6 原始碼
  4. $ git clone https://code.qt.io/qt/qt5.git qt6
    $ cd qt6
    $ perl init-repository --module-subset=default,-qtwebengine
    

    補充說明

    若僅執行 init-repository 則會自動抓取所有子模組(這需要一些時間與空間),如果需要 Qt WebEngine 模組,請移除 -qtwebengine 選項。

  5. 建立 build 資料夾並設定編譯參數
  6. $ export CXX=g++
    $ export CC=gcc
    $ export LD=lld  
    
    $ ulimit -n 65536
    $ ulimit -s 8192
    $ ulimit -v unlimited
    $ ulimit -f unlimited
    
    $ cmake -S . -B build \
      -DCMAKE_INSTALL_PREFIX=/usr/local/qt-6.10.1 \
      -DCMAKE_BUILD_TYPE=Release \
      -DFEATURE_developer_build=OFF \
      -DQT_BUILD_EXAMPLES=OFF \
      -DQT_BUILD_TESTS=OFF \
      -DQT_FEATURE_webengine=ON \
      -DCMAKE_LINKER=lld \
      -DCMAKE_EXE_LINKER_FLAGS="-fuse-ld=lld" \
      -DCMAKE_SHARED_LINKER_FLAGS="-fuse-ld=lld" \
      -DCMAKE_CXX_FLAGS="-fuse-ld=lld"
    
    mkdir build && cd build
    $ ../configure -prefix=/usr/local/qt6.10.1 \
       -opensource \
       -confirm-license \
       -nomake tests -nomake examples \
       -release \
       -DQT_BUILD_WEBENGINE=ON \
       -DCMAKE_LINKER=lld \
       -DCMAKE_EXE_LINKER_FLAGS="-fuse-ld=lld" \
       -DCMAKE_SHARED_LINKER_FLAGS="-fuse-ld=lld"\
       -DCMAKE_CXX_FLAGS="-fuse-ld=lld" \
       
    

    參數說明:

    • -prefix: 指定安裝位置
    • 可以從這裡知道目前QT最新版本:https://code.qt.io/cgit/qt/qt5.git/refs/heads

    • -opensource -confirm-license: 使用 LGPL 開源授權
    • -nomake tests/ -nomake examples: 加快編譯速度
    • -skip qtwebengine: 如果不需要 WebEngine,可以跳過這個模組

     

  7. 開始編譯
  8. $ cmake --build . \
       --parallel 8 (啟動多執行緒編譯,通常看 CPU 核心數量來決定)
    
  9. 安裝 Qt6,
  10. 把 Qt 安裝到 -prefix 所指定的資料夾,此時要注意是否有寫入該資料夾權限。

    $ cmake --install .
    
  11. 設定環境變數
  12. 將以下新增到 ~/.bashrc 或 ~/.zshrc:

    export QT_HOME=/usr/local/qt6
    export PATH=$QT_HOME/bin:$PATH
    export LD_LIBRARY_PATH=$QT_HOME/lib:$LD_LIBRARY_PATH
    export QT_PLUGIN_PATH=$QT_HOME/plugins
    export QML2_IMPORT_PATH=$QT_HOME/qml
    

參考資源

  1. Building Qt 6 from Git: https://wiki.qt.io/Building_Qt_6_from_Git

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

*