我正在使用带有子项目结构的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示例将不胜感激
答案 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();
}
但是我失去了在它的主类中为我的消息类进行测试的能力。所以,如果有更好的方法,我会接受它。