使用 mingw g++ 时,我在 Windows 7 上的 Qt Creator 中创建和链接静态库时遇到问题。我通过手动破解自动生成的文件找到了一种解决方案,但我不喜欢它。
假设您有一个包含应用程序子项目和库子项目的子目录项目,如下所示。
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 文件中,以便名称最终匹配(并且最好适合正在使用的工具链)?执行此步骤是一种常见的刺激。