2025年2月6日 星期四

configure的 -- 功能

-- 用来 区分不同的工具或构建系统的选项,以便它们能够正确地解析和处理。-- 是用于 分隔选项 的标记,它在许多构建工具(如 cmakeconfigure 脚本)中被使用来明确分隔命令行选项和随后的参数。

不可以将给 CMake 的选项写在 -- 之前、给 Qt 的选项写在 -- 之后,因为它们属于两个不同的构建系统,并且 -- 有明确的作用,决定了哪些选项是传递给 Qt 配置脚本的,哪些是传递给 CMake 的。

关键点:

  • -- 的作用-- 用来 分隔不同工具的选项。它告诉构建系统,接下来所有的选项都属于 CMake,而之前的选项则是给 Qt 配置脚本使用的。

  • 顺序和语法很重要:构建过程中的不同工具和脚本有不同的选项解析方式。Qt 配置脚本和 CMake 对选项的处理方式不同,因此它们的选项必须按正确的顺序传递。

为什么不可以调换位置?

  1. Qt 配置选项 必须在 -- 之前传递,因为它们是给 Qt 配置脚本 解析的,而 Qt 配置脚本并不理解 CMake 的选项(如 -D)。

    • Qt 配置选项通常是 -device-option-device-prefix 等,它们都是给 Qt 的构建系统使用的。
  2. CMake 配置选项 必须在 -- 之后传递,因为 CMake 会解析 -D 风格的选项(例如 -DCMAKE_TOOLCHAIN_FILE),它只理解 CMake 配置相关的选项。

错误示例:

如果你调换顺序,把给 CMake 的选项写在 -- 之前,而给 Qt 的选项写在 -- 之后:

../configure -release -opengl es2 -nomake examples -nomake tests \
-qt-host-path $LINUX_QT_INSTALL_PATH \ -extprefix $MY_LIB_PATH/usr/local/qt-raspi-dep \ -prefix $MY_LIB_PATH/usr/local/qt6 \ -device linux-rasp-pi4-aarch64 \ -device-option CROSS_COMPILE=aarch64-linux-gnu- \ -- -DQT_FEATURE_xcb=ON -DCMAKE_TOOLCHAIN_FILE=$QT_SRC_PATH/toolchain.cmake

在这种情况下,CMake 会试图解析 -device-option-device 等选项,但是这些是 Qt 配置脚本的选项,CMake 不理解它们,导致构建过程中的错误。

正确顺序:

正确的顺序应该是:

../configure -release -opengl es2 -nomake examples -nomake tests \
-qt-host-path $LINUX_QT_INSTALL_PATH \ -extprefix $MY_LIB_PATH/usr/local/qt-raspi-dep \ -prefix $MY_LIB_PATH/usr/local/qt6 \ -device linux-rasp-pi4-aarch64 \ -device-option CROSS_COMPILE=aarch64-linux-gnu- -- \ -DCMAKE_TOOLCHAIN_FILE=$QT_SRC_PATH/toolchain.cmake -DQT_FEATURE_xcb=ON

这样,-- 前面的选项是 Qt 配置选项,-- 后面的选项是 CMake 配置选项,每个构建工具会根据自己的需求正确地解析相应的选项。

总结:

  • -- 必须位于 Qt 配置选项和 CMake 配置选项之间,这样才能正确地分隔两个构建工具的选项。
  • 如果你调换顺序,CMake 会错误地解析 Qt 配置选项,导致构建失败。

沒有留言:

張貼留言