无论我选择哪种选项,Qt都会继续构建共享版本

时间:2015-10-06 14:07:48

标签: c++ qt

我已经为一个独立的构建静态编译了Qt,并且我已经创建了一个工具包,我将所有内容都设置为QT Static构建的目录。

无论我做什么,即使我设置了这个工具包,它也会继续与另一个工具一起构建。它依赖于Qt dll。

我的.pro文件中有这个:

QMAKE_LFLAGS += -static-libgcc
CONFIG += static

我还有什么需要做的吗?我还在我的环境变量中设置PATH中的目录以匹配静态Qt构建。

我甚至编辑了qmake.conf并在开头添加了这些:

QMAKE_LFLAGS +=  -static-libgcc -static -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc
CONFIG += staticlib
CONFIG += static
DEFINES += QT_STATIC_BUILD
DEFINES += STATIC

仍然没有变化,不断建立共享构建!

编辑:以下是qt.conf现在的样子:

[Paths]
Libraries=../lib/qtcreator
Plugins=plugins
Imports=imports
Qml2Imports=qml

EDIT2 :我更改了qt.conf文件:

[Paths]
Libraries=../lib/qtcreator
Plugins=plugins
Imports=imports
Qml2Imports=qml
Prefix=D:/Qt5.1.0/qt-everywhere-opensource-src-5.1.1/qtbase

但是我觉得我还需要设置一些其他参数,因为现在它正在尝试make一个已经编译好的对象并且发出一个奇怪的错误:

:-1: error: No rule to make target 'D:/Qt5.1.0/qt-everywhere-opensource-src-5.1.1/lib/qtcreator/libQt5Widgetsd.a', needed by 'debug\myQApp.exe'.  Stop.

以下是生成的makefile的相关部分:

first: all
all: Makefile.Debug  $(DESTDIR_TARGET)

$(DESTDIR_TARGET): 
D:/Qt5.1.0/qt-everywhere-opensource-src-5.1.1/lib/qtcreator/libQt5Widgetsd.a 
D:/Qt5.1.0/qt-everywhere-opensource-src-5.1.1/lib/qtcreator/libQt5Networkd.a 
D:/Qt5.1.0/qt-everywhere-opensource-src-5.1.1/lib/qtcreator/libQt5Guid.a 
D:/Qt5.1.0/qt-everywhere-opensource-src-5.1.1/lib/qtcreator/libQt5Cored.a 

注意:忽略目录中的Qt5.1.0文件夹,我是手工编写的,实际上是5.1.1。

1 个答案:

答案 0 :(得分:2)

构建与静态构建的Qt框架链接的Qt应用程序涉及以下内容:

  1. 静态构建的Qt框架。本主题涉及从源代码配置和运行Qt自己的构建。这个答案很难涵盖。但是有很多links。如果我对此有具体问题,我可以回答更多问题。记住用于构建Qt的配置,尤其是指向[i] make spec [/ i]的平台参数。您为Qt配置设置的make规范应该与您的应用程序构建/编译器/库兼容,例如:

    configure -static -debug-and-release [i] -platform win32-msvc2013 [/ i] -openssl -I%OPENSSL_HOME%\ include -L%OPENSSL_HOME%-nomake examples -nomake tests -confirm-license -opengl es2 -skip qtwebkit -skip qtwebkit-examples -skip qttools

  2. 您需要确保位于qtbase \ mkspecs中的make spec是正确的,如果需要,请修改一个。我修改了qtbase \ mkspecs \ win32-msvc2013 \ qmake.conf以使用-MT -MTd编译器选项而不是-MD -MDd,以避免将动态运行时与静态构建链接,并为应用项目设置相同的内容。

    1. 您的本地Qt配置指向静态构建的Qt框架。请参阅qt.conf“prefix”参数。确保qt.conf文件位于qmake工具可从启动路径访问的同一目录中。指向预建Qt:

      [路径]

      Prefix = C:/Qt/5.3/Src.64/qtbase #qtbase是指向的地方

    2. Qt app someApp.pro文件具有静态应用程序构建和匹配编译器设置的正确定义。如果我对此有具体问题,我也可以回答更多问题。