QT4 configure 学习备忘

这篇博客主要介绍了QT4 configure的配置过程,包括操作系统检测、许可检查和变量初始化。重点讲解了部分关键变量如relconf、relpath、outpath的含义,以及如何处理命令行参数。同时,提到了QT_LICENSE_FILE的设定,以及shellEscape、QMakeVar等函数的作用。然而,文章中未解的是getQMakeConf2()函数中特定变量声明的目的。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


#############operating system detection:


   1.用户情况
    UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
    UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
    UNAME_SYSTEM=`(uname -s) 2>/dev/null`  || UNAME_SYSTEM=unknown

    UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown


   2.echo风格
    if echo '\c' | grep '\c' >/dev/null; then
            ECHO_N=-n
    else
            ECHO_C='\c'

    fi


##############window system detection
    PLATFORM_X11=no
    PLATFORM_QWS=maybe
    PLATFORM_QPA=maybe
    BUILD_ON_MAC=no
    
    if [ -d /System/Library/Frameworks/Carbon.framework ]; then
        PLATFORM_MAC=maybe
        BUILD_ON_MAC=yes
    else
        PLATFORM_MAC=no

    fi


###############Qt version detection
    configure目录下src/corelib/global/qglobal.h文件中#define QT_VERSION_STR获取Qt version,#define QT_PACKAGEDATE_STR获取该QT版本发包时间


###############check the license

    略去不看


###############initalize variables

    1.若下列变量"RANLIB STRIP OBJDUMP LD CC CXX CFLAGS CXXFLAGS LDFLAGS存在,将变量以QMAKE_CFLAGS=$CFLAGS形式写入$QMAKE_VARS_FILE
    2.将    styles += cde mac motif plastique cleanlooks windows
            decorations += default windows styled
            mouse-drivers += pc
        kbd-drivers += tty        写入$QMAKE_VARS_FILE
    3.如$UNAME_SYSTEM值为Linux,将gfx-drivers += linuxfb,mouse-drivers += linuxtp写入$QMAKE_VARS_FILE
    4.如configure传入-developer-build/-nokia-developer参数,将kbd-drivers += um写入$QMAKE_VARS_FILE
    5.unset QTDIR
    6.变量初始化
        MIN_DBUS_1_VERSION=0.93

        CFG_CONFIGURE_EXIT_ON_ERROR=yes
        CFG_PROFILE=no
        CFG_EXCEPTIONS=unspecified
        CFG_GUI=auto # (yes|no|auto)
        CFG_SCRIPT=auto # (yes|no|auto)
        CFG_SCRIPTTOOLS=auto # (yes|no|auto)
        CFG_XMLPATTERNS=auto # (yes|no|auto)
        CFG_INCREMENTAL=auto
        CFG_QCONFIG=full
        CFG_DEBUG=auto
        CFG_MYSQL_CONFIG=
        CFG_DEBUG_RELEASE=no
        CFG_SHARED=yes
        CFG_SM=auto
        CFG_XSHAPE=auto
        CFG_XSYNC=auto
        CFG_XVIDEO=auto
        CFG_XINERAMA=runtime
        CFG_XFIXES=runtime
        CFG_ZLIB=auto
        CFG_SYMBIAN_DEFFILES=auto
        CFG_S60=auto
        CFG_SQLITE=qt
        CFG_GIF=auto
        CFG_TIFF=auto
        CFG_LIBTIFF=auto
        CFG_PNG=yes
        CFG_LIBPNG=auto
        CFG_JPEG=auto
        CFG_LIBJPEG=auto
        CFG_MNG=auto
        CFG_LIBMNG=auto
        CFG_XCURSOR=runtime
        CFG_XRANDR=runtime
        CFG_XRENDER=auto
        CFG_MITSHM=auto
        CFG_OPENGL=auto
        CFG_OPENVG=auto
        CFG_OPENVG_LC_INCLUDES=no
        CFG_OPENVG_SHIVA=auto
        CFG_OPENVG_ON_OPENGL=auto
        CFG_EGL=no
        CFG_EGL_GLES_INCLUDES=no
        CFG_SSE=auto
        CFG_FONTCONFIG=auto
        CFG_QWS_FREETYPE=auto
        CFG_LIBFREETYPE=auto
        CFG_SQL_AVAILABLE=
        QT_DEFAULT_BUILD_PARTS="libs tools examples demos docs translations"
        CFG_BUILD_PARTS=""
        CFG_NOBUILD_PARTS=""
        CFG_RELEASE_QMAKE=no
        CFG_PHONON=auto
        CFG_PHONON_BACKEND=yes
        CFG_MULTIMEDIA=auto
        CFG_AUDIO_BACKEND=auto
        CFG_SVG=auto
        CFG_DECLARATIVE=auto
        CFG_DECLARATIVE_DEBUG=yes
        CFG_WEBKIT=auto # (yes|no|auto|debug)
        CFG_JAVASCRIPTCORE_JIT=auto
        CFG_STACK_PROTECTOR_STRONG=auto

        CFG_GFX_AVAILABLE="linuxfb transformed qvfb vnc multiscreen directfb"
        CFG_GFX_ON="linuxfb multiscreen"
        CFG_GFX_PLUGIN_AVAILABLE=
        CFG_GFX_PLUGIN=
        CFG_GFX_OFF=
        CFG_KBD_AVAILABLE="tty linuxinput qvfb"
        CFG_KBD_ON="tty"    #default, see QMakeVar above
        CFG_MOUSE_AVAILABLE="pc linuxtp linuxinput tslib qvfb"
        CFG_MOUSE_ON="pc linuxtp"   #default, see QMakeVar above



if [ -f "$relpath/src/gui/embedded/qscreenqnx_qws.cpp" ]; then
    CFG_KBD_AVAILABLE="${CFG_KBD_AVAILABLE} qnx"
    CFG_MOUSE_AVAILABLE="${CFG_MOUSE_AVAILABLE} qnx"
    CFG_GFX_AVAILABLE="${CFG_GFX_AVAILABLE} qnx"
fi
if [ -f "$relpath/src/gui/embedded/qscreenintegrityfb_qws.cpp" ]; then
    CFG_KBD_AVAILABLE="${CFG_KBD_AVAILABLE} integrity"
    CFG_MOUSE_AVAILABLE="${CFG_MOUSE_AVAILABLE} integrity"
    CFG_GFX_AVAILABLE="${CFG_GFX_AVAILABLE} integrityfb"
fi

if [ -f "$relpath/src/gui/embedded/qscreenvxworksfb_qws.cpp" ]; then
    CFG_KBD_AVAILABLE="${CFG_KBD_AVAILABLE} vxworks"
    CFG_MOUSE_AVAILABLE="${CFG_MOUSE_AVAILABLE} vxworks"
    CFG_GFX_AVAILABLE="${CFG_GFX_AVAILABLE} vxworksfb"
fi

CFG_ARCH=
CFG_HOST_ARCH=
CFG_KBD_PLUGIN_AVAILABLE=
CFG_KBD_PLUGIN=
CFG_KBD_OFF=
CFG_MOUSE_PLUGIN_AVAILABLE=
CFG_MOUSE_PLUGIN=
CFG_MOUSE_OFF=
CFG_USE_GNUMAKE=no
CFG_IM=yes
CFG_DECORATION_AVAILABLE="styled windows default"
CFG_DECORATION_ON="${CFG_DECORATION_AVAILABLE}" # all on by default
CFG_DECORATION_PLUGIN_AVAILABLE=
CFG_DECORATION_PLUGIN=
CFG_XINPUT=runtime
CFG_XKB=auto
CFG_NIS=auto
CFG_CUPS=auto
CFG_ICONV=auto
CFG_DBUS=auto
CFG_GLIB=auto
CFG_GSTREAMER=auto
CFG_QGTKSTYLE=auto
CFG_QS60STYLE=auto
CFG_LARGEFILE=auto
CFG_OPENSSL=auto
CFG_PTMALLOC=no
CFG_STL=auto
CFG_PRECOMPILE=auto
CFG_SEPARATE_DEBUG_INFO=no
CFG_SEPARATE_DEBUG_INFO_NOCOPY=no
CFG_REDUCE_EXPORTS=auto
CFG_MMX=auto
CFG_3DNOW=auto
CFG_SSE=auto
CFG_SSE2=auto
CFG_SSE3=auto
CFG_SSSE3=auto
CFG_SSE4_1=auto
CFG_SSE4_2=auto
CFG_AVX=auto
CFG_REDUCE_RELOCATIONS=no
CFG_IPV6=auto
CFG_NAS=no
CFG_QWS_DEPTHS=all
CFG_USER_BUILD_KEY=
CFG_ACCESSIBILITY=auto
CFG_QT3SUPPORT=yes
CFG_ENDIAN=auto
CFG_HOST_ENDIAN=auto
CFG_DOUBLEFORMAT=auto
CFG_ARMFPA=auto
CFG_IWMMXT=no
CFG_NEON=auto
CFG_CLOCK_GETTIME=auto
CFG_CLOCK_MONOTONIC=auto
CFG_MREMAP=auto
CFG_GETADDRINFO=auto
CFG_IPV6IFNAME=auto
CFG_GETIFADDRS=auto
CFG_INOTIFY=auto
CFG_RPATH=yes
CFG_FRAMEWORK=auto
CFG_MAC_ARCHS=
MAC_CONFIG_TEST_COMMANDLINE=  # used to make the configure tests run with the correct arch's and SDK settings
CFG_MAC_DWARF2=auto
CFG_MAC_XARCH=auto
CFG_MAC_CARBON=no
CFG_MAC_COCOA=yes
COMMANDLINE_MAC_CARBON=no
CFG_MAC_HARFBUZZ=no
CFG_SXE=no
CFG_PREFIX_INSTALL=yes
CFG_SDK=
D_FLAGS=
I_FLAGS=
L_FLAGS=
RPATH_FLAGS=
l_FLAGS=
QCONFIG_FLAGS=
XPLATFORM=              # This seems to be the QMAKESPEC, like "linux-g++" or "symbian-gcce"
XPLATFORM_MINGW=no      # Whether target platform is MinGW (win32-g++*)
XPLATFORM_INTEGRITY=no  # Whether target platform is INTEGRITY (*integrity*)
XPLATFORM_SYMBIAN=no    # Whether target platform is SYMBIAN (*symbian*)
XPLATFORM_SYMBIAN_SBSV2=no # Whether target platform is SYMBIAN_SBSV2 (symbian-sbsv2)
XPLATFORM_QNX=no
PLATFORM=$QMAKESPEC
QT_CROSS_COMPILE=no
OPT_CONFIRM_LICENSE=no
OPT_SHADOW=maybe
OPT_FAST=auto
OPT_VERBOSE=no
OPT_HELP=
CFG_SILENT=no
CFG_GRAPHICS_SYSTEM=default
CFG_RUNTIME_SYSTEM=
CFG_ALSA=auto
CFG_PULSEAUDIO=auto
CFG_COREWLAN=auto
CFG_ICD=auto
CFG_NOPROCESS=no
CFG_ICU=auto
CFG_SYSTEM_PROXIES=no
CFG_SLOG2=auto

# initalize variables used for installation
QT_INSTALL_PREFIX=
QT_INSTALL_DOCS=
QT_INSTALL_HEADERS=
QT_INSTALL_LIBS=
QT_INSTALL_BINS=
QT_INSTALL_PLUGINS=
QT_INSTALL_IMPORTS=
QT_INSTALL_DATA=
QT_INSTALL_TRANSLATIONS=
QT_INSTALL_SETTINGS=
QT_INSTALL_EXAMPLES=
QT_INSTALL_DEMOS=
QT_HOST_PREFIX=

#flags for SQL drivers
QT_CFLAGS_PSQL=
QT_LFLAGS_PSQL=
QT_CFLAGS_MYSQL=
QT_LFLAGS_MYSQL=
QT_LFLAGS_MYSQL_R=
QT_CFLAGS_SQLITE=
QT_LFLAGS_SQLITE=
QT_LFLAGS_ODBC="-lodbc"
QT_LFLAGS_TDS=

# flags for libdbus-1
QT_CFLAGS_DBUS=
QT_LIBS_DBUS=

# flags for Glib (X11 only)
QT_CFLAGS_GLIB=
QT_LIBS_GLIB=

# flags for GStreamer (X11 only)
QT_CFLAGS_GSTREAMER=
QT_LIBS_GSTREAMER=

# default qpa platform
QT_QPA_DEFAULT_PLATFORM=

#flag for Symbian fpu settings
QT_CFLAGS_FPU=

# flags for libconnsettings0 (used for Maemo ICD bearer management plugin)
QT_CFLAGS_CONNSETTINGS=
QT_LIBS_CONNSETTINGS=

#-------------------------------------------------------------------------------
# check SQL drivers, mouse drivers and decorations available in this package
#-------------------------------------------------------------------------------
    1.在src/plugins/sqldrivers/目录下,对每个文件夹名$a,CFG_SQL_AVAILABE += $a,CFG_SQL_$a=auto
    2.在src/plugins/decorations目录下,对每个文件夹名$a,CFG_DECORATION_PLUGIN_AVAILABLE += $a
    3.在src/plugins/kbddrivers目录下,对每个文件夹名$a,CFG_KBD_PLUGIN_AVAILABLE += $a
    4.在src/plugins/mousedrivers目录下,对每个文件夹名$a,CFG_MOUSE_PLUGIN_AVAILABLE += $a
    5.在src/plugins/gfxdrivers目录下,对每个文件夹名$a,CFG_GFX_PLUGIN_AVAILABLE += $a,CFG_GFX_OFF=$CFG_GFX_AVAILABLE
    6.在src/plugins/imageformats目录下,对每个文件夹名$a,CFG_IMAGEFORMAT_PLUGIN_AVAILABLE += $a

#-------------------------------------------------------------------------------
# Set Default NaCl options
#-------------------------------------------------------------------------------
    if [ "$CFG_EMBEDDED" = "nacl" ] 执行的代码,略去不看

#-------------------------------------------------------------------------------
# parse command line arguments
#-------------------------------------------------------------------------------
    对参数进行解析
    根据$CFG_QCONFIG值minimal/small/medium/large/full,QT_CONFIG += $CFG_QCONFIG(将所有小于该值的选项加入)-config

#-------------------------------------------------------------------------------
# build tree initialization
#-------------------------------------------------------------------------------

    确定AWK=gawk/nawk/awk(优先级降序),确定PERL=perl的位置
    # is this a shadow build?
    # detect build style
    # symlink fonts to be able to run application from build directory
    # find a make command
    
#-------------------------------------------------------------------------------
# auto-detect all that hasn't been specified in the arguments
#-------------------------------------------------------------------------------

    部分未指定的参数,根据当前平台自动检测设置

#-------------------------------------------------------------------------------
# determine the system architecture
#-------------------------------------------------------------------------------

    与交叉编译有关

#-------------------------------------------------------------------------------
# tests that don't need qmake (must be run before displaying help)
#-------------------------------------------------------------------------------

    与交叉编译有关

#-------------------------------------------------------------------------------
# post process QT_INSTALL_* variables
#-------------------------------------------------------------------------------

    #prefix #docs #headers #libs #bins #plugins #imports #data #translations
#settings #examples #demos

#-------------------------------------------------------------------------------
# help - interactive parts of the script _after_ this section please
#-------------------------------------------------------------------------------

    # next, emit a usage message if something failed.
    help回应

# -----------------------------------------------------------------------------
# LICENSING, INTERACTIVE PART
# -----------------------------------------------------------------------------

    
#-------------------------------------------------------------------------------
# generate qconfig.cpp
#-------------------------------------------------------------------------------

# -----------------------------------------------------------------------------
# build qmake
# -----------------------------------------------------------------------------

    # symlink includes
    # build qmake

#-------------------------------------------------------------------------------
# write out device config before we run the test.
#-------------------------------------------------------------------------------

    PKG_CONFIG thing

#-------------------------------------------------------------------------------
# tests that need qmake
#-------------------------------------------------------------------------------

    测试并决定安装部件列表

#-------------------------------------------------------------------------------
# ask for all that hasn't been auto-detected or specified in the arguments
#-------------------------------------------------------------------------------

    询问用户相关安装选项

#-------------------------------------------------------------------------------
# generate QT_BUILD_KEY
#-------------------------------------------------------------------------------

    编译器版本检测

#-------------------------------------------------------------------------------
# part of configuration information goes into qconfig.h
#-------------------------------------------------------------------------------

#-------------------------------------------------------------------------------
# save configuration into qconfig.pri
#-------------------------------------------------------------------------------

#-------------------------------------------------------------------------------
# save configuration into .qmake.cache
#-------------------------------------------------------------------------------

#-------------------------------------------------------------------------------
# give feedback on configuration
#-------------------------------------------------------------------------------

    列出编译器信息/安装部件目录
#-------------------------------------------------------------------------------
# build makefiles based on the configuration
#-------------------------------------------------------------------------------

    正式干活,生成Makefile
#-------------------------------------------------------------------------------
# check for platforms that we don't yet know about
#-------------------------------------------------------------------------------

#-------------------------------------------------------------------------------
# check if the user passed the -no-zlib option, which is no longer supported
#-------------------------------------------------------------------------------

#-------------------------------------------------------------------------------
# finally save the executed command to another script

#-------------------------------------------------------------------------------



部分变量:
relconf=获得脚本名      configure
relpath=获得脚本目录    /home/troublemakers/下载/qt-everywhere-opensource-src-4.8.6
outpath=设置生成目录    /home/troublemakers/下载/qt-everywhere-opensource-src-4.8.6
OPT_CMDLINE=命令参数列表,去掉-v
QMAKE_SWITCHES=
QMAKE_VARS=
QMAKE_CONFIG=
QTCONFIG_CONFIG=
QT_CONFIG=
SUPPORTED=
QMAKE_VARS_FILE=  新建或清空.qmake.vars
DEVICE_VARS_FILE= 新建或清空.device.vars


$QT_LICENSE_FILE 变量值为LICENSE文件,如变量值不存在,默认$HOME下.qt-license文件。如果存在普通文件LICENSE,将文件转存为Linux下格式(去掉\r)的新文件LICENSE.tmp


部分函数:
    shellEscape() //将命令参数中的空格转义
    QMakeVar()    //$2 $eq $3存入QMAKE_VARS_FILE,第一个参数若是set/add/del,eq为=/+=/-=,否则eq为空
    getQMakeConf1() //echo $1文件,在将$1中所有include展开后
    getQMakeConf2() //
    getQMakeConf3() //

===========================================================================

未解:getQMakeConf2()函数中为何首先声明 values["LITERAL_WHITESPACE"] = " "   和    values["LITERAL_DOLLAR"] = "$"


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值