qtcreator项目文件depndancies和构建顺序

时间:2016-10-15 10:24:32

标签: qt qt-creator qmake

我正在使用带有子项目结构的qtcreator。案例是: 我有2个项目。项目A和B.在编译之后,然后是B,但是在B中,我必须使用A的标题(类,函数等)。我在wiki中找到了depends和subdir项目设置,但是当我尝试将A类从项目A包含到B类到项目B中时(这些名称是为了令人信服),它给了我不确定的参考。这是主项目(和子项目)的.pro文件:

#base pro file
TEMPLATE = subdirs

SUBDIRS += \
    message \
    daemon \
    receiver


daemon.subdir = daemon
message.subdir = message
daemon.depends = message

子项目A:

TEMPLATE = app
CONFIG += console c++11
CONFIG -= app_bundle
CONFIG -= qt

SOURCES += main.cpp \
    daemon.cpp \
    logwriter.cpp

HEADERS += \
    daemon.h \
    logwriter.h \
    defs.h

LIBS += -lpthread

子项目B:

TEMPLATE = app
CONFIG += console c++11
CONFIG -= app_bundle
CONFIG -= qt

SOURCES += \
    message.cpp \
    main.cpp

HEADERS += \
    message.h

所以我需要将项目B类放到项目A中,并进一步扩展项目时。 问候。 编辑:如果我要将项目A设置为库(-lclssA),那么.pri示例将不胜感激

2 个答案:

答案 0 :(得分:1)

"未定义的引用"通常是链接问题,而不是标题包括问题。如果需要使用它,您可能必须将项目A与B链接。 例如在A:

LIBS += ../path/to/libB.so 

答案 1 :(得分:0)

最简单的方法是将其作为lib包含,最简单的方法是从qtcreator,右键单击dependee和“Add library” - > “构建树中的现有库”。这将在.pro中生成以下内容:

                var watch = A();
                var stack = B();
                var list = C();
                D(watch);

System.Diagnostics.Stopwatch A() 
{
     return new System.Diagnostics.Stopwatch();
}
Stack<string> B() 
{
     return new Stack<string>();
}
List<string> C() 
{
     return new List<string>();
}
void D(System.Diagnostics.Stopwatch a) 
{
     a.Start();
}

但是我失去了在它的主类中为我的消息类进行测试的能力。所以,如果有更好的方法,我会接受它。