Ilian Zapryanov
Ilian Zapryanov

Reputation: 1185

qtcreator project file depndancies and build order

I am using qtcreator with subdir project structure. The case is that: I have 2 projects. Project A and B. After A compiles, then B, but in B, I must use the headers of A (classes, functions, etc.). I`ve found in wiki the depends and subdir project setup, but when I try to include class A from project A into class B into project B ( these names are for convininece ) it gives me undefined referencies. Here is my .pro file from main project (and subprojects respectively ):

#base pro file
TEMPLATE = subdirs

SUBDIRS += \
    message \
    daemon \
    receiver


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

subproject 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

subproject B:

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

SOURCES += \
    message.cpp \
    main.cpp

HEADERS += \
    message.h

So I need the project B classes into project A and further on when I extend the project. Regards. EDIT: A .pri example would be appreciated, if I'm going to set project A to be a library (-lclssA )

Upvotes: 1

Views: 552

Answers (2)

Ilian Zapryanov
Ilian Zapryanov

Reputation: 1185

The simplest way is to include it as a lib, the easiest way was from qtcreator, rightclick on the dependee and "Add library" -> "Existing library from build tree". This will generate the following in the .pro:

win32:CONFIG(release, debug|release): LIBS += -L$$OUT_PWD/../message/release/ -lmessage
else:win32:CONFIG(debug, debug|release): LIBS += -L$$OUT_PWD/../message/debug/ -lmessage
else:unix: LIBS += -L$$OUT_PWD/../message/ -lmessage

INCLUDEPATH += $$PWD/../message
DEPENDPATH += $$PWD/../message

However I am losing the ability to make tests for my message class in it's main class. So if there is a better way, I'd accept it.

Upvotes: 0

"undefined references" are generally link problems, not header include problems. You may have to link your project A with B if you need to use it. e.g in A :

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

Upvotes: 1

Related Questions