Заставить Qt Creator генерировать правильные файлы .pro для включения статических библиотек g ++ в Windows

У меня были проблемы с созданием и связыванием статических библиотек в Qt Creator в Windows 7 при использовании mingw g ++. Я нашел одно решение, вручную взломав автоматически сгенерированные файлы, но мне это не нравится.

Допустим, у вас есть проект поддиапазонов, содержащий подпроект приложения и подпроект библиотеки, как показано ниже.

parent.pro

TEMPLATE = subdirs
SUBDIRS += \
    utilities \
    program

utilities.pro

CONFIG += staticlib
TARGET = utilities
TEMPLATE = lib
HEADERS += ...
SOURCES += ...

program.pro

TEMPLATE = app
INCLUDEPATH += ../utilities/
HEADERS += ...
SOURCES += ...

Если вы используете встроенную функцию Qt Creator для добавления внутренней библиотеки в приложение, она генерирует следующие строки в .pro файле приложения:

win32:CONFIG(release, debug|release): LIBS += \
    -L$$OUT_PWD/../utilities/release/ -lutilities
else:win32:CONFIG(debug, debug|release): LIBS += \
    -L$$OUT_PWD/../utilities/debug/ -lutilities
else:symbian: LIBS += \
    -lutilities
else:unix: LIBS += \
    -L$$OUT_PWD/../utilities/ -lutilities

INCLUDEPATH += $$PWD/../utilities
DEPENDPATH += $$PWD/../utilities

win32:CONFIG(release, debug|release): PRE_TARGETDEPS += \
    $$OUT_PWD/../utilities/release/utilities.lib
else:win32:CONFIG(debug, debug|release): PRE_TARGETDEPS += \
    $$OUT_PWD/../utilities/debug/utilities.lib
else:unix:!symbian: PRE_TARGETDEPS += \
    $$OUT_PWD/../utilities/libutilities.a

Это очень полезно, за исключением того, что он, кажется, принимает имена, которые не связаны с автоматически сгенерированными. Мой совет - пройти и изменить последний абзац на ...

win32:CONFIG(release, debug|release): PRE_TARGETDEPS += \
    $$OUT_PWD/../utils/release/libutils.a
else:win32:CONFIG(debug, debug|release): PRE_TARGETDEPS += \
    $$OUT_PWD/../utils/debug/libutils.a
else:unix:!symbian: PRE_TARGETDEPS += \
    $$OUT_PWD/../utils/libutils.a

... поэтому он соответствует именам библиотек, созданных g ++.

Есть ли один параметр / определение, которое я мог бы добавить в файлы библиотеки или приложения .pro, чтобы имена совпадали (и предпочтительно соответствовали используемой цепочке инструментов)? Выполнение этого шага - частое раздражение.


person Samuel Harmer    schedule 26.06.2012    source источник


Ответы (1)


Насколько я помню, такие вещи, как имена библиотек, являются частью используемого QMAKESPEC. Для MingW это должно быть «win32-g ++».

В Qt Creator вы можете изменить QMakeSpec косвенно через настройку проектов, выбрав «Цепочку инструментов».

person jwernerny    schedule 28.06.2012
comment
Ага: qmake.exe F:\ProjectName\ProjectName.pro -r -spec win32-g++ ... Проблема не в том, что имя библиотеки, выводимой g ++, неверно. Это имя, поскольку Qt Creator автоматически заполняет .pro при использовании функции «добавить внутреннюю библиотеку». - person Samuel Harmer; 28.06.2012