#qt #qt-creator #qmake
#qt #qt-creator #qmake
Вопрос:
У меня есть проект qtcreator с шаблоном вложенной папки. Папки выглядят следующим образом:
mainProject/
mainProject.pro
staticLib/
(bunch of .cpp and .h files)
staticLib.pro
testApp/
main.cpp
testApp.pro
И mainProject.pro файл:
TEMPLATE = subdirs
CONFIG = ordered
SUBDIRS = staticLib
testApp
testApp.depends = staticLib
Я хотел бы установить статическую библиотеку, поэтому я добавил опцию установки в staticLib.pro файл:
headersDataFiles.path = $$LIBPATH/include
headersDataFiles.files = $$PWD/*.h
INSTALLS = headersDataFiles
libraryFiles.path = $$LIBPATH/lib
Debug:libraryFiles.files = $$OUT_PWD/debug/*.a
Release:libraryFiles.files = $$OUT_PWD/release/*.a
INSTALLS = libraryFiles
Проблема в том, что когда я создаю проект в Qtcreator, он создает статическую библиотеку, а затем приложение, не запустив сначала make install, поэтому сборка приложения завершается с ошибкой. И Qtcreator позволяет мне добавлять шаги сборки только после qmake_all (которые создают оба проекта без предварительной установки библиотеки).
Итак, вопрос в том, могу ли я каким-либо образом создать staticLib project, установить его, а затем создать TestApp?
РЕДАКТИРОВАТЬ: Проект TestApp всегда можно связать с библиотекой из выходного каталога первого проекта. Но я хотел бы переместить файлы .a и headers в другую папку, чтобы сохранить проект организованным. Сбой сборки TestApp — это не проблема. Извините за неправильно понятое.
Комментарии:
1. Установка не требуется afaik для компиляции чего-либо со статическими библиотеками в зависимости. Похоже, у вас неправильная конфигурация testApp.pro — не могли бы вы также поделиться им? Вы пытались добавить статическую библиотеку в TestApp через Qt Creator?
2. Да, вы правы, установка не требуется. На самом деле это не установка в системе, что я хочу сделать, просто переместите сгенерированные заголовки .a и в другие папки проекта, чтобы сохранить мой проект организованным. Спасибо за ваш комментарий и извините за неправильно понятый, я отредактировал вопрос.
Ответ №1:
Мне не нравится идея добавления шагов в Qt creator (если, конечно, это не единственный способ), поскольку они не являются постоянными в разных средах разработки AFAIK. Например, вам нужно будет добавлять этот шаг в Qt Creator каждый раз, когда вы загружаете / клонируете код из репозитория на другой машине.
Мы сделали это в Windows (однако это должно работать и для других платформ) с помощью QMAKE_POST_LINK и $$QMAKE_COPY (предварительно определите команду кроссплатформенного копирования qmake):
FILES_TO_COPY = $$DESTDIR/staticLib.a <path to your header1> <path to your header2>
или, если вы предпочитаете:
FILES_TO_COPY = $$DESTDIR/staticLib.a
FILES_TO_COPY = <path to your header1>
FILES_TO_COPY = <path to your header2>
Вы можете использовать переменные, такие как $$PWD , чтобы не жестко указывать полный путь к заголовкам, а затем
DESTINATION_DIR = $$shell_quote($$shell_path("/put/it/here/"))
for (FILE, FILES_TO_COPY)
{
FILE_PATH = $$shell_quote($$shell_path($$FILE))
QMAKE_POST_LINK = $$QMAKE_COPY $$FILE_PATH $$DESTINATION_DIR $$escape_expand(\n)
}
UPD: Если у вас есть все необходимые заголовки в одном каталоге, вы можете использовать QMAKE_COPY_DIR вместо QMAKE_COPY.
Кроме того, если вы планируете создавать его на одной конкретной платформе, вы могли бы опустить $$shel_quote/$$shell_path и просто написать правильные пути.
Ответ №2:
Или, если установка — это то, что вы хотите, вы можете просто добавить
QMAKE_POST_LINK=$(MAKE) install
в ваш файл .pro