【发布时间】:2012-04-19 13:26:55
【问题描述】:
为了简化情况,假设有 2 个文件:core.cpp 和 main.cpp。
core.cpp 包含程序的功能,main.cpp 包含基本的main() 实现。
我想要 Qt(使用 qmake 和 .pro 文件)
- 先构建
core.a,然后 - 使用它和
main.cpp来构建main.exe。
如何在 qmake 文件中进行设置?
【问题讨论】:
为了简化情况,假设有 2 个文件:core.cpp 和 main.cpp。
core.cpp 包含程序的功能,main.cpp 包含基本的main() 实现。
我想要 Qt(使用 qmake 和 .pro 文件)
core.a,然后main.cpp 来构建main.exe。 如何在 qmake 文件中进行设置?
【问题讨论】:
文件系统布局:
MyProject
|_ myproject.pro
|_ core
|_ core.cpp
|_ core.h
|_ core.pro
|_ app
|_ main.cpp
|_ app.pro
myproject.pro:
TEMPLATE = subdirs
CONFIG += ordered
SUBDIRS = core \
app
app.depends = core
core.pro:
TEMPLATE = lib
CONFIG += staticlib
HEADERS = core.h
SOURCES = core.cpp
app.pro:
TEMPLATE = app
SOURCES = main.cpp
LIBS += -L../core -lcore
TARGET = ../app-exe # move executable one dire up
【讨论】:
Failed to start program. Path or permissions wrong?。我该如何解决? (它显然是在基目录中寻找可执行文件)
INCLUDEPATH += ../core/ 在app.pro 中也应该是必需的,对吧?
core.h 包含来自特定 Qt 库的内容的情况,例如QT += websockets?我们不希望app.pro 必须声明对仅间接引入的库的显式依赖...
如果您正在使用静态库中的资源,您也应该将它们导入您的应用程序中。 Q_INIT_RESOURCE 是将资源文件导入应用程序的方式。
假设您在静态库中有一个文件名为myResources.qrc 的资源文件。然后,您应该在应用程序中初始化它,如下所示:
QApplication a(argc, argv);
Q_INIT_RESOURCE(resources); //Magic is here.
MainWindow w;
w.show();
a.exec();
对于 Masci 给出的很好的例子,.pro 文件可能会被修改如下:
TEMPLATE = lib
CONFIG += staticlib
HEADERS = core.h
SOURCES = core.cpp
RESOURCES += myResources.qrc
【讨论】: