Каков самый простой способ ссылки библиотек в проектах QT?

StackOverflow https://stackoverflow.com/questions/2870637

Вопрос

У меня есть два проекта приложений QT4 GUI и один общий Библиотечный проект, ссылающийся на файл .PRO с шаблоном «подразделения». Итак, это как:

  • ExampleApp.pro.
    • app1.pro.
    • app2.pro.
    • sharedlib.pro.

Теперь, что я хочу сделать, это ссылка ShareDlib из App1 и App2, чтобы каждый раз, когда я запускаю App1.exe, мне не нужно вручную копировать SharedLib.dll из своей собственной папки в папку App1.exe.

Я мог бы установить переменную среды пути в окне проектов, но это не очень портативно. Я посмотрел на размещение переменную libs в файл app1.pro, но я не уверен, что это относится только к статически связанным библиотекам - я попробовал его с различными синтаксисами, и это не работает с общими Libs Отказ

Это было полезно?

Решение

Вы можете организовать свой проект следующим образом:

  • Проект1.
    • мусорное ведро
    • либ
    • приложение
      • app2.pro.
    • приложение
      • app2.pro.
    • SharedLib.
      • sharedlib.pro.

В SharedLib.Pro можно добавить что-то вроде этого:

TEMPLATE = lib
TARGET = sharedlibr
QT + = core \
      gui
DESTDIR = .. / lib

Destdir: гарантирует, что результат компиляции будет скопирован в местоположение ".. / lib"

Что касается приложений App1 и App2:

TEMPLATE = app
TARGET = app1
QT + = core \
      gui
DESTDIR = .. / bin

Это только для разработки, при создании установщика библиотеки и исполняемые файлы помещаются в соответствующие режимы, в зависимости от операционной системы.

Другие советы

Чтобы добавить к этому (немного поздно!), Можно использовать QMAKE_POST_LINK Чтобы скопировать файлы вокруг после завершения сборки. Пример:

defineReplace(formatpath) {
    path = $$1

    win32 {
        return(\"$$replace(path, "/", "\\")\")
    } else:unix {
        return($$replace(path, " ", "\\ "))
    } else {
        error("Unknown platform in formatpath!")
    }
}

win32:COPY_CMD = copy
unix:COPY_CMD = cp -P
macx:COPY_CMD = cp -R

win32:CMD_SEP = $$escape_expand(\n\t)
unix:CMD_SEP = ";"

win32:LIB_EXT = dll
unix:LIB_EXT = so*
macx:LIB_EXT = dylib

# Put here the directory of your library's build dir, relative to the current directory
# A path is given for example...
MYLIB_BUILD_DIR = $$_PRO_FILE_PWD_/../lib/bin

QMAKE_POST_LINK += $$COPY_CMD $$formatpath($$MYLIB_BUILD_DIR/*.$$LIB_EXT) $$formatpath($$OUT_PWD/$$DESTDIR) $$CMD_SEP
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top