在使用MinGW,C++ 11,Qt 5和qmake的Windows下我有以下项目结构:
/my-project
my-project.pro
/my-app
my-app.pro
main.cpp
/module-a
module-a.pro
modulea.h
modulea.cpp
/module-b
module-b.pro
moduleb.h
moduleb.cpp
Run Code Online (Sandbox Code Playgroud)
模块之间的依赖关系应如下所示:
my-app ==> module-a ==> module-b
Run Code Online (Sandbox Code Playgroud)
我想要实现的是my-app使用module-a,module-a使用module-b而my-app对module-b一无所知.模块-a仅通过其实现引用模块-b(#includefor module-b位于module-a的.cpp中).
我试图通过在qmake中将module-a和module-b配置为静态库来实现这一点.不幸的是,在编译时我收到链接器错误,说"对ModuleB :: doSmthB()的未定义引用"
我理解这个链接问题的原因,我的问题是,是否有可能实现类似于提议的分层结构的东西?
资料来源:
my-project.pro:
TEMPLATE = subdirs
SUBDIRS += module-b
SUBDIRS += module-a
SUBDIRS += my-app
my-app.depends = module-a
module-a.depends = module-b
Run Code Online (Sandbox Code Playgroud)
my-app.pro:
QT += widgets
TARGET = my-app
TEMPLATE = app
CONFIG += c++11
SOURCES += *.cpp
win32 {
INCLUDEPATH += $$clean_path($$PWD/../module-a)
DEPENDPATH += $$clean_path($$PWD/../module-a)
LIBS += $$clean_path($$OUT_PWD/../module-a/debug/libmodule-a.a)
PRE_TARGETDEPS += $$clean_path($$OUT_PWD/../module-a/debug/libmodule-a.a) …Run Code Online (Sandbox Code Playgroud)