2016-10-19 9 views
1

У меня есть проект qtcreator с шаблоном подпапки. Папки выглядит следующим образом:Как установить первый проект после сборки в шаблоне подпапки qmake?

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 (которые строят оба проекта без первой установки lib).

Итак, вопрос в том, можно ли построить проект staticLib, установить его, а затем построить testApp?

EDIT: Проект testApp всегда может быть связан с библиотекой из выходного каталога первого проекта. Но я хотел бы переместить файлы .a и headers в другую папку, чтобы организовать проект. Сбой здания testApp - это не проблема. Извините за непонятое.

+0

Установке не требуется afaik для компиляции чего-либо со статическими libs в зависимости. Это похоже на неправильную конфигурацию в testApp.pro - не могли бы вы также поделиться ею? Вы пытались добавить статический lib в testApp через Qt Creator? –

+0

Да, вы правы, установите его не требуется. На самом деле это не установка в системе, что я хочу сделать, просто переместите сгенерированные .a и заголовки в другие папки в проекте, чтобы мой проект был организован. Спасибо за ваш комментарий и извините за непонятое, я отредактировал вопрос. –

ответ

1

Мне не нравится идея добавления шагов в Qt creator (если это не единственный способ, конечно), поскольку они не настойчивы в разных средах разработчиков AFAIK. Например, вам нужно будет добавить этот шаг в Qt Creator каждый раз, когда вы загружаете/клонируете код из репозитория на другой машине.

, как мы сделали это на Windows (однако, он должен работать для других платформ также) находится через (предопределить QMAKE команды копирования кросс-платформенной) QMAKE_POST_LINK и $$ QMAKE_COPY:

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 и просто написать правильные пути.