количество файлов проекта qtcreator и порядок сборки

#qt #qt-creator #qmake

#qt #qt-creator #qmake

Вопрос:

Я использую qtcreator со структурой проекта subdir. Дело в том, что: у меня есть 2 проекта. Проекты A и B. После компиляции A, затем 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 и далее, когда я расширяю проект.
С уважением.
РЕДАКТИРОВАТЬ: пример .pri был бы признателен, если я собираюсь сделать проект A библиотекой (-lclssA )

Ответ №1:

«неопределенные ссылки», как правило, являются проблемами ссылок, а не проблемами включения заголовка. Возможно, вам придется связать ваш проект A с B, если вам нужно его использовать. например, в :

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

Комментарии:

1. Когда я индивидуально создаю файлы .cpp из проекта B, они создаются. Также мои проекты не являются библиотеками. Должен ли я создавать проект зависимостей как библиотеку? Я не хочу этого делать. Итак, я хочу знать, может ли проект qtcreator сделать это.

2. Но вы правы, однако библиотека .so работает, если я t find a workaround, I смогу сделать ее библиотекой…

Ответ №2:

Самый простой способ — включить его в качестве библиотеки, самый простой способ был из qtcreator, щелкнуть правой кнопкой мыши на зависимом и «Добавить библиотеку» -> «Существующая библиотека из дерева сборки». Это приведет к созданию следующего в файле .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
 

Однако я теряю возможность проводить тесты для моего класса message в его основном классе. Так что, если есть лучший способ, я бы принял его.