#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 в его основном классе. Так что, если есть лучший способ, я бы принял его.