Skip to content

客户端编译步骤

Altair Wei edited this page Aug 25, 2021 · 36 revisions

1 开发环境准备

1.1 编译工具

1.1.1 安装编译器

  • Linux 平台,请使用 gcc ,某些发行版有 build-essential 包,里面包含完整工具链。
  • MacOS 平台,请从 AppStore 安装 Xcode 。
  • Windows 平台,请安装 Visual Studio 2017 ,需要包含 Visual C++ 编译器。

1.1.2 使用包管理器安装软件包

Linux

Linux 平台直接使用 apt 或者 yum 之类自带的包管理器。

sudo apt install make git wget build-essential libgl1-mesa-dev xvfb libgl-dev fcitx fcitx-frontend-qt5 python3 python3-pip python3-setuptools
pip3 install --upgrade pip

安装打包工具:

sudo wget -q -O /usr/bin/linuxdeployqt https://github.com/probonopd/linuxdeployqt/releases/download/continuous/linuxdeployqt-continuous-x86_64.AppImage
sudo chmod a+x /usr/bin/linuxdeployqt

安装后请执行 linuxdeployqt -v 确认打包工具是否正常。如果提示 GLIBC 太新,那么在编译时请使用项目提供 Docker 环境。

MacOS

MacOS 平台请使用 Homebrew ,安装方式见 官网

然后使用 brew 安装其他工具:

brew install git node python3

使用 pip 安装需要的 Python 包:

pip3 install setuptools wheel

使用 npm 安装打包工具:

npm install --global appdmg

如果 npm 报告 permission 相关错误,那么执行下面命令:

sudo chown -R $(whoami) $(npm config get prefix)/{lib/node_modules,bin,share}

Windows

Windows 平台请使用 chocolatey ,安装方式见 官网

然后,以管理员身份运行 powershell 或者 CMD ,使用 choco 安装其他工具:

choco install git python3

Windows 平台需要另外安装 Debugging Tools for Windows 。

1.1.3 安装并配置 Conan

1) 安装

如何安装 Conan 请直接参考 官方文档 ,不想折腾就直接去官网下载编译好的 二进制安装包

Linux

pip install conan

MacOS

brew install conan

由于 MacOS 新版本更新了安全控制,如果出现错误,可以在执行 brew install conan 前先执行 sudo chown -R $(whoami) /usr/local/sbin

sudo chown -R $(whoami) /usr/local/sbin
xcode-select --install

MacOS 平台下安装编译好的 Conan 后,命令行工具在 /usr/local/bin/conan 。默认 /etc/paths 中已经有了,如果没有,请手动添加。因为在 Qt Creator 中构建项目时,如果 PATH 中没有 /usr/local/bin ,所以很有可能出现找不到 Conan 的情况,所以请确认该路径已添加到 PATH 中去。

Windows

可以去 Conan 官网 直接下载二进制安装包。

2) 配置

安装完后检测系统构建环境,并配置 Conan 默认设置:

conan profile new default --detect

如果 Linux 用户使用 GCC >= 5.1 作为编译器,还需要设置 C++ 库版本:

conan profile update settings.compiler.libcxx=libstdc++11 default

为 Conan 添加远程服务端:

conan remote add bincrafters https://bincrafters.jfrog.io/artifactory/api/conan/public-conan
conan remote add wiznoteplus https://altairwei.jfrog.io/artifactory/api/conan/wiznoteplus-conan

conan config set general.revisions_enabled=1

检查生成的默认配置文件:

conan profile show default

MacOS 平台正确的配置应该类似如下所示,不同 macOS 平台请填写不同编译器版本

[build_requires]
[settings]
    os=Macos
    arch=x86_64
    compiler=apple-clang
    compiler.version=8.1
    compiler.libcxx=libc++
    build_type=Release
[options]
[env]

Linux 平台正确的配置应该类似如下所示:

[settings]
    os=Linux
    os_build=Linux
    arch=x86_64
    arch_build=x86_64
    compiler=gcc
    compiler.version=7
    compiler.libcxx=libstdc++11
    build_type=Release
[options]
[build_requires]
[env]

如果配置出现缺少或者不正确的地方,可以参考下面这个命令来修改:

conan profile update settings.compiler.libcxx=libstdc++11 default

compiler.libcxx 是设置名,libstdc++11 设置值。

1.2 搭建 Qt 开发环境

Qt 是一个著名的 C++ 应用程序框架。你并不能说它只是一个 GUI 库,因为 Qt 十分庞大,并不仅仅是 GUI 组件。使用 Qt,在一定程度上你获得的是一个“一站式”的解决方案:不再需要研究 STL,不再需要 C++ 的 <string>,不再需要到处去找解析 XML、连接数据库、访问网络的各种第三方库,因为 Qt 自己内置了这些技术。

如果你没有搭建好的 C++ 开发工具链,那么我们建议使用 QtCreator 作为 IDE。如果你更喜欢 VSCode ,那么可以参考 使用VSCode开发CMake项目 配置。

1.2.1 使用 aqtinstall 安装 Qt 库

aqtinstall 是一个工具,它会解析官方预编译包的仓库地址,然后通过命令行自定义下载。

Linux

pip3 install aqtinstall
aqt install -O $HOME/Qt 5.14.1 linux desktop gcc_64 -m qtwebengine

MacOS

brew install p7zip
pip3 install aqtinstall
aqt install -O $HOME/Qt 5.14.1 mac desktop clang_64 -m qtwebengine

Windows

pip3 install aqtinstall
aqt install -O $HOME/Qt 5.14.1 windows desktop win64_msvc2017_64 -m qtwebengine

1.2.2 使用官方安装器安装 Qt 库

使用官网下载页面的在线安装包:https://www.qt.io/download ,可以安装同时安装 Qt 和 QtCreator 。 官网下载比较慢,可以使用国内镜像网站快速下载 ,参考教程:http://c.biancheng.net/view/3851.html

注意:低于 Qt 5.14 版本会导致构建失败。

如果在线安装包出现网络问题,可以通过离线包来安装 Qt 库:

在线或离线安装步骤如下:

  1. Qt 官网 注册账号用于获得许可。
  2. 下载在线安装包或者离线安装包后,为 qt-opensource-linux-x64-5.14.1.run 文件添加执行权限后执行安装程序。
  3. 选择要安装的预构建库版本:
    • Linux 用户勾选 Desktop gcc 64-bitQt WebEngine 两个组件。
    • MacOS 用户勾选 macOSQt WebEngine 两个模块。
    • Windows 用户勾选 MSVC 2017 64-bitQt WebEngine 两个组件。
  4. 配置 QtCreator Kits,参见该图示:Configure_QtCreator_for_Linux.png

最后,你需要记住 Qt 库的安装位置。比如:~/Qt/5.14.1/gcc_64 (末尾没有反斜杠) 是我 Linux 上适用于 gcc 编译器的 Qt 库位置,其他平台上根据你安装时的选择有所不同。这个位置非常重要,并且有时需要在编译或打包脚本中明确指定。

2 编译

2.1 了解构建系统

2.1.1 源代码目录结构

WizNotePlus
├── build/ - 平台相关构建文件
├── cmake/ - 构建相关模块
├── documents/ - 项目文档
├── external/ - 外部构建或部署工具
├── i18n/ - 国际化文本
├── installer/ - 安装包相关文件
├── lib/ - 第三方依赖库
│   ├── aggregation/
│   ├── CrashReporter.framework/
│   ├── cryptopp/
│   ├── extensionsystem/
│   ├── gumbo-parser/
│   ├── gumbo-query/
│   ├── quazip/
│   └── CMakeLists.txt - 依赖库构建清单
├── mac-window/ - macOS风格窗口
├── resources/ - 资源文件
├── script/ - 构建或打包脚本
├── share/ - 运行时依赖资源
├── src/ - 主程序源代码
│   ├── core/
│   ├── html/
│   ├── interface/
│   ├── mac/
│   ├── share/
│   ├── sync/
│   ├── test/
│   ├── ui/
│   ├── utils/
│   ├── widgets/
│   ├── ...
│   └── CMakeLists.txt - 主程序构建清单
├── CHANGELOG.md  - 更改日志
├── CMakeLists.txt - 项目顶层构建清单
├── conanfile.txt - 包管理器依赖清单
├── LICENSE - 版权声明
├── package.cmake - 跨平台构建脚本
└── README.md

2.1.2 CMake 构建系统的一般步骤

CMake 使用每个目录下的清单文件 CMakeLists.txt 生成平台特异性本地构建文件。整个构建过程可以分为四个步骤:生成构建安装打包

首先,我们需要利用清单使 CMake 生成本地构建文件,比如 Unix 平台下的 Makefies 。然后,我们就可以调用本地构建工具(比如 make)来将源代码 构建 二进制程序。这些生成和构建步骤会产生大量的临时文件,因此我们需要实施 安装 操作来将构建的目标从临时文件中抽离出来,安装到你指定的位置。通常来说,一般程序到了安装这一步就可以结束了,但对于那些有许多第三方依赖以及需要给用户提供简便使用操作的应用来说,还需要额外的 打包 步骤,包括部署第三方依赖和提供安装包或镜像。

2.2 使用 Conan 构建客户端

Conan 不仅仅是 C++ 包管理器,还是一种通用构建系统变量编写器,可以用来编写跨平台脚本,详细可见 What is Conan? 我们在 WizNotePlus 中使用 Conan 简化 C++ 项目的构建步骤。

2.2.1 获得项目源代码

项目路径中不能有中文,否则 Conan 会无法解析。

git clone https://github.com/altairwei/WizNotePlus.git
cd WizNotePlus
mkdir _build

2.2.2 构建项目

.ci/build.sh 或者 .ci\build.ps1 是用于 CI 的脚本,里面包含几条简单的 Conan 命令。这个脚本接受两个参数,第一个参数是源代码文件夹地址,第二个参数是项目构建工作目录,两者都最好使用绝对路径。

Linux & MacOS

打开 Bash 时输入以下命令:

export QT_INSTALL_PREFIX=path/to/qt/gcc_64 && ./.ci/build.sh $(pwd) $(pwd)/_build

如果在 Linux 平台构建过程中 linuxdeployqt 报告 GLIBC 相关错误,那么可以使用 Docker 镜像来构建:

sudo rm -rf _build
docker run \
	-v $PWD:/WizNotePlus \
	-v $PWD/_build:/build-WizNotePlus \
	altairwei/wiznoteplus-build:latest \
	/WizNotePlus/.ci/build.sh /WizNotePlus /build-WizNotePlus

Windows

打开 PowerShell 输入以下命令:

$env:QT_INSTALL_PREFIX = "C:\path\to\qt\msvc2017_64"
.\.ci\build.ps1 "$PWD" "$PWD\_build"

2.2.3 构建过程中可能出现的问题

脚本执行过程需要保持网络连接,因为 Conan 需要从二进制仓库取出预编译好的第三方依赖,而其他一些依赖,需要 Git 从 GitHub 仓库中取出并从源码编译。这一步骤的耗时取决于你的网速。

2.2.4 构建和打包的输出结果

在你进入项目仓库根目录,并且执行构建脚本 后,输出结果如下所示:

_build
├── build
└── package
    ├── bin
    ├── dist
    │   └── WizNotePlus-linux-v2.8.0-beta.1-27-g21d2960.AppImage
    ├── lib
    ├── plugins
    └── share

_build/build 文件夹内是构建过程中产出的临时文件,_build/package/dist 文件内就是构建好的软件包。

2.3 使用 QtCreator 调试客户端

2.3.1 配置 Qt Creator

检查 Qt Version

偏好设置 > Kits > Qt Versions

检查 Qt Creator 是否自动检查出 Qt 库,如果没有就手动添加。在弹出窗口中找到 Qt 库携带的 qmake 地址,比如 $HOME/Qt/5.14.1/clang_64/bin/qmake ,选中并添加后 Qt Creator 就能知道 Qt 库的安装信息了。

检查 CMake

偏好设置 > Kits > CMake

Conan 自动编译流程中依赖了特定版本的 CMake 3.12.4,因此在编译教程中并没有要求你安装 CMake。但是 Qt Creator 手动构建方式依赖于系统中安装的 CMake,因此你需要自己安装 CMake 并检查 Qt Creator 的配置。

2.3.2 构建 WizNotePlus

  1. 打开 Qt Creator,在菜单栏 File ⇨ Open File or Project ⇨ 选中项目根目录 CMakeLists.txt 。
  2. Configure Project 时,选择 Debug ,左下角构建类型同样选择 Debug 。
  3. 配置项目时出错,请尝试 Build ⇨ Clear CMake Configuration ,然后再次 Build ⇨ Run CMake
  4. 点击左下角构建即可开始。

3. 常见问题

3.1 Mac 下进行环境搭建可能会遇到的问题

  1. 关于1.1安装xcode

    appstore 上的 xcode 要8个G,有点大,可以使用xcode命令行工具包,是一个小型独立包,可供下载独立于Xcode的和允许您执行命令行开发OS X。命令为:打开终端,输入 xcode-select --install 执行命令,如果安装了会显示 command line tools are already installed

    安装后路径:/Library/Developer/CommandLineTools/SDKs

  2. 关于1.2 搭建 Qt 开发环境

    使用官网下载页面的在线安装包:https://www.qt.io/download ,可以安装同时安装 Qt 和 QtCreator 。官网下载比较慢,可以使用国内镜像网站快速下载 ,参考教程:http://c.biancheng.net/view/3851.html

    尽量使用1.2.2的步骤,不要使用1.2.1的步骤。

  3. 在第2编译步骤之前,手工下载安装 cmake 3.12.4

    因为 conan 依赖了cmake 3.12.4,如果本地没有,conan 会帮我们下载,45M 左右,但是从官网下载会比较慢,所以建议手工直接下载,我是百度上找随便找了一个网站下载的。并且把 conanfile.py 把第64行注释掉。

  4. 第2.2步的命令行:

    例子:

    export QT_INSTALL_PREFIX=~/Qt5.14.1/5.14.1/clang_64 && ./.ci/build.sh $(pwd) $(pwd)/_build
    
  5. 执行的时候,可能会报错

    CMake Error at CMakeLists.txt:85 (conan_cmake_run):
      Unknown CMake command "conan_cmake_run".
    

    确认_build目录下,conan.cmake文件大小,如果为0k,可以手动下载拷贝一份放过去。

  6. 执行的时候,可能会报其他错误如

    Could not find a package configuration file provided by "quazip" with any
      of the following names:
    
        quazipConfig.cmake
        quazip-config.cmake
    
      Add the installation prefix of "quazip" to CMAKE_PREFIX_PATH or set
      "quazip_DIR" to a directory containing one of the above files.  If "quazip"
      provides a separate development package or SDK, be sure it has been
      installed.
    

    解决方案:cd 到~/.conan/data目录下,确认相关包是否有下载过,如果下载过,可以删除掉,重新下载。

  7. qtcreator 配置供参考

    build的构建路径为: /Users/XXXX/Documents/workspaces/wizWorkspace/WizNotePlus/_build/build

    run的构建路径为:/Users/XXX/Documents/workspaces/wizWorkspace/WizNotePlus/_build/build/bin

3.1 Windows 下编译可能会遇到的问题

  1. Windows 通过 pip install conan 后, 使用 QtCreator 时,可能会提示找不到 conan命令。

    可以手动把 conan 加入到 path 路径中,或者使用预编译的安装包来安装 conan 。

  2. Windows 存在多版本 Visual Studio 时,如何指定版本

    修改 .\.ci\build.ps1 来指定 VS 版本:

    conan install $SRC_DIR -if $WORK_DIR_BUILD --build missing -o qtdir=$env:QT_INSTALL_PREFIX -s compiler="Visual Studio" -s compiler.version=15
  3. Windows 下开发 gcc 版本问题

    应该使用 tdmgcc,不要使用 msmy2 中的 pacman 来安装的 gcc 版本,也要注意 Visual Studio 安装如果选了 strawberry,strawberry 也会安装一个gcc,此时要注意 gcc 环境变量的顺序,tdmgcc 应该在前面。

  4. 执行 powershell 脚本时,如果提示验证问题

    set-ExecutionPolicy UnRestricted
  5. Windows 下代码注释如果包含中文,可能导致编译失败