LINUX.ORG.RU

qtcreator - обьектный файл с общими реализациями

 , ,


0

1

qtcreator - проект из шаблон-визарда qt-widgets, довешиваю «свои плюшки»...

есть мини-библиотека, состоит из 3х исходников:

- lib1 c/h (использует lib2)
- lib2 c/h (более низкоуровневая)
- func c/h (рутина, используется обоими lib1 & lib2)

при написании библиотеки извратился простым подключеним «реализаций» вместе с «хедерами»
сборка/отладки библиотеки проходит без проблем

теперь хочу «правильно» добавить библиотеку в qtcreator-проект (хедеры отдельно, реализация отдельно)

если просто подключить в *.pro-файле

HEADERS += ini/lib1.h
HEADERS += ini/lib2.h
HEADERS += ini/func.h
SOURCES += ini/lib1.c
SOURCES += ini/lib2.c
SOURCES += ini/func.c

то получаем «анрезолв/func», что и не удивительно.

если добавляем «потерянные» рутины (func.o) («всевозможными» методами) - то получаем коллизию/множественное определение, (в исходнике и в обьектнике), что тоже не удивительно.

как правильно подключить библиотеку? точнее, не саму библиотеку, а обьектный файл с общими реализациями рутины (понятное дело, нужно без установки библиотеки в систему :о)

...

qtcreator-3.1.2
qt-4.8.7
★★

Ответ на: комментарий от sunjob

В QtCreator есть мастер создания динамической библиотеки. Запускаешь и нажимаешь далее, далее, готово. Потом добавляешь туда свои исходники и собираешь. На выходе будет .so

ox55ff ★★★ ()
Ответ на: комментарий от sunjob

Это тоже очень просто. Потом библиотеку подключаешь в pro файле того проекте, где хочешь её использовать. Заголовочные через INCLUDEPATH+=путь до папки с заголовочными файлами. Библиотеку через LIB+=-L"путь до папки с библиотекой" -lимя библиотеки. Причём имя библиотеки без lib- и .so. Например если файл называется libsome.so, то писать надо -lsome.

ox55ff ★★★ ()

Почему бы не использовать стандартные qmake-овские pri-файлы?


isEmpty(SUBJOB_PRI) {

SUBJOB_PRI = pri

QT += serialport

INCLUDEPATH += $$PWD
DEPENDPATH += $$PWD

HEADERS += \
	$$PWD/subjob.h

SOURCES += \
	$$PWD/subjob.cpp

}

Потом этот файл подключаешь в pro файле строчкой include(../path/to/subjob.pri) и дважды никакие файлы не попадут, ведь isEmpty проверит переменную

Это мне в свое время кто-то тут на ЛОРе подсказал, а я использую успешно, и так подключив один файл автоматом приедут все либы и все нужные QT += и так далее

I-Love-Microsoft ★★★★★ ()
Последнее исправление: I-Love-Microsoft (всего исправлений: 1)
Ответ на: комментарий от I-Love-Microsoft

Возможно я не понял суть темы, но возможно легкое изменение одной строки позволит легко переключаться между двумя реализациями сохраняя тот же хедер, но требуется перекомпиляция

I-Love-Microsoft ★★★★★ ()

Компилируешь статическую библиотеку своим проектом с CONFIG+= staticlib. Потом создаёшь .pri файл, в котором даёшь ссылку на включение этой библиотеки и там же перечисляешь все нужные прикладной программе .h файлы. Включаешь этот .pri в проект. Всё. Это не изврат, это правильная стандартная процедура, которая позволяет собрать твой проект не только в Creator, но и вручную, например, на сервере CI.

hobbit ★★★★★ ()
Ответ на: комментарий от hobbit

вот это как раз и есть изврат... :о)

я решаю трушно для себя - включением хедеров и реализаций

со всеми очевидными вытекающими для меня плюсами (в данном случае, в данном контексте)
- собирается все и сразу в один модуль
- изменение, дополнения, доработка любого из файла будет приняты сразу
- итд итп...
- мнимые накладные расходы на сборку в данном случае ничтожны (я бы сказал смешны)

сравните размах и мощь ваших (и всех предложенных мероприятий) и ... добавление неск.строк

все имхо (швыряйте помидорами, критикуйте - на здоровье, выслушаю, почитаю, приму к сведению)

спасибо

sunjob ★★ ()
Последнее исправление: sunjob (всего исправлений: 1)