Итак берем и собираем libQtCore.a под Windows на Qt 4.8.1.
Сначала устанавливаем SDK для разработки с галочкой OpenSource из QtSdk-offline-win-x86-v1_2_1.exe.
В результате получим исходники QT в каталоге C:\QtSDK1.2.1\QtSources\4.8.1. Исходники собираются из проекта src.pro , который находится в каталоге C:\QtSDK1.2.1\QtSources\4.8.1\src .
Для начала надо установить глобальные переменные для Qt. Делается это с помощью config.exe , который находится в каталоге C:\QtSDK1.2.1\QtSources\4.8.1. configure.exe практическое использование.
В результате в этом же каталоге появится файл .qmake.cache , где и будут прописаны первоначальные базовые переменные. .qmake.cache будет использоваться всеми проектами ниже по дереву каталогов (так работает qmake.exe).
Важно понимать , что есть переменные первого уровня, которые вшиты прямо в бинарник qmake.exe и которые мы не может естественно поменять (переменные 1 уровня) . Это те переменные , которые появляются при наведении мышки на объект профиля :
Это например QT_INSTALL_LIBS , которые используются в некоторых .pro проектах ниже.
В файле .qmake.cache добавляются еще переменные (назовем из переменные 2 уровня) : QT_BUILD_TREE , QT_SOURCE_TREE
OBJECTS_DIR = tmp/obj/release_static
MOC_DIR = tmp/moc/release_static
RCC_DIR = tmp/rcc/release_static
styles += windows cleanlooks windowsxp windowsvista cde
TMPPATH = $$quote($$(INCLUDE))
QMAKE_INCDIR_POST += $$split(TMPPATH,";")
TMPPATH = $$quote($$(LIB))
QMAKE_LIBDIR_POST += $$split(TMPPATH,";")
CONFIG += minimal-config small-config medium-config large-config full-config release incremental msvc_mp create_prl link_prl depend_includepath QTDIR_build
QT_BUILD_PARTS = libs tools examples demos docs translations
QMAKESPEC = C:/QtSDK1.2.1/QtSources/4.8.1/mkspecs/win32-g++
ARCH = windows
QT_BUILD_TREE = C:/QtSDK1.2.1/QtSources/4.8.1
QT_SOURCE_TREE = C:/QtSDK1.2.1/QtSources/4.8.1
QMAKE_MOC = $$QT_BUILD_TREE/bin/moc.exe
QMAKE_UIC = $$QT_BUILD_TREE/bin/uic.exe
QMAKE_UIC3 = $$QT_BUILD_TREE/bin/uic3.exe
QMAKE_RCC = $$QT_BUILD_TREE/bin/rcc.exe
QMAKE_DUMPCPP = $$QT_BUILD_TREE/bin/dumpcpp.exe
QMAKE_INCDIR_QT = $$QT_BUILD_TREE/include
QMAKE_LIBDIR_QT = $$QT_BUILD_TREE/lib
QMAKE_LIBDIR_QT - это каталог куда будет собираться наша библиотека libQtCore.a (и остальные если понадибится). Изначально этот каталог пустой.
Открываем проект src.pro через Qt Creator , делаем qmake, делаем сборку и каталоге C:\QtSDK1.2.1\QtSources\4.8.1\lib появляется наш libQtCore.a.
Важно - НЕ делать теневую сборку! Это намного упростит задачу.
Теперь мы хотим создать на основе libQtCore.a наше первое консольное приложение. Как и где мы это делаем?...
Имеет смысл сделать наше приложение частью исходников Qt, то есть прямо в каталоге C:\QtSDK1.2.1\QtSources\4.8.1\src. Из нашего приложения просто делаем include(./src.pro) и зависимость от исходников у нас есть.
QT += core
QT -= gui
TARGET = my
CONFIG += console
CONFIG -= app_bundle
TEMPLATE = app
include(./src.pro)
SOURCES += main.cpp
Делаем сборку, завершается успешно :
17:22:02: Выполняется сборка проекта my...
g++ -c -O2 -fexceptions -mthreads -Wall -fno-rtti -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_NO_DEBUG -DQT_CORE_LIB -DQT_THREAD_SUPPORT -DQT_NO_DYNAMIC_CAST -I"..\..\include\QtCore" -I"..\..\include" -I"..\..\include\ActiveQt" -I"tmp\moc\release_static" -I"..\my" -I"." -I"c:\QtSDK1.2.1\Desktop\Qt\4.8.1\mingw\mkspecs\win32-g++" -o tmp\obj\release_static\main.o ..\my\main.cpp
g++ -Wl,-s -Wl,-subsystem,console -mthreads -o release\my.exe tmp/obj/release_static/main.o -L"c:\QtSDK1.2.1\QtSources\4.8.1\lib" -L"c:\QtSDK1.2.1\QtSources\4.8.1\lib" -lQtCore -lole32 -luuid -lws2_32 -ladvapi32 -lshell32 -luser32 -lkernel32 -LC:/QtSDK1.2.1/QtSources/4.8.1/lib_my
Наш новый проект (приложение my) нормально сбоирается с библиотекой libQtCore.a смотрите : -L"c:\QtSDK1.2.1\QtSources\4.8.1\lib" -lQtCore .
При этом очень важно , что libQtCore.a заново не пересобирается (кстати этоот процесс доволно длительный). Собирается только наше приложение my.exe. В этом и есть главный смысл qmake / make / makefile - пересобирвать модули только если в них были внесены изменения.
Теперь понятно как дальше создавать свои проекты из исходников Qt.
Примечание: Для сборки отладочной версии не забудьте сделать config.exe с параметрами -debug-and-release и -declarative-debug . После сборки появится libQtCored.a (послдедняя буква d в имени libQtCored означает debug ) в C:\QtSDK1.2.1\QtSources\4.8.1\lib .
Теперь переходим к изучению какие исходники компилировались по порядку (в нашем минимальном проекте), ибо там их немеренно.
Примечание: файл my.exe получился 2Кб в релиз версии.