Какой самый простой способ ссылаться на библиотеки в проектах Qt?
У меня есть два проекта приложения Qt4 Gui и один проект с общей библиотекой, на которые все ссылаются в файле.pro с шаблоном "subdirs". Итак, это как:
- exampleapp.pro
- app1.pro
- app2.pro
- sharedlib.pro
Теперь я хочу сослаться на sharedlib из app1 и app2, чтобы при каждом запуске app1.exe мне не приходилось вручную копировать sharedlib.dll из его собственной папки в папку app1.exe.
Я мог бы установить переменную среды PATH в окне проектов, но это не очень переносимо. Я смотрел на помещение переменной LIBS в файл app1.pro, но я не уверен, относится ли это только к статически связанным библиотекам - я пробовал ее с различными синтаксисами и, похоже, она не работает с общими библиотеками,
2 ответа
Вы можете организовать свой проект следующим образом:
- Project1
- бункер
- Lib
- app1
- app2.pro
- app2
- 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