2016-12-20 6 views
1

У меня есть кросс-платформенный проект, написанный в Qt/C++, этот проект использует статическую библиотеку, написанную в Go как зависимость. Go project генерирует два файла (.a и .h как ожидалось) с помощью GNU Make.Qt project include subprojects build in qmake

Я пытаюсь автоматизировать сборки, для которых я использую qmake, чтобы сгенерировать Makefile, а затем вызывать целевой объект по умолчанию этого Makefile как простой $ make.

В настоящее время моя сборка явно явно git clone go-subproject && cd go-subproject && make, затем копирует полученный файл библиотеки и заголовков и только затем вызывает git clone qt-project && qmake && make (обратите внимание, что это не точные команды, это просто упрощенное объяснение того, что я делаю прямо сейчас).

Я могу включить подпроект как git module, так что он будет автоматически получать последний код подпроекта при выполнении git clone qt-project.

Для этого необходимо Как я могу указать файл .pro для создания Makefile, который сначала будет строить подпроект?

UPDATE:

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

/ 
| 
+- .git/ 
| 
+- qt-project.pro 
| 
+- go-project/ 
|   | 
|   +- .git/ 
|   | 
|   +- Makefile 

Так с вышеуказанной структурой я хотел бы построить весь проект только с $ qmake && make

Какой код я должен был бы иметь в своем qt-project.pro, что будет делать что?

ответ

1

После поиска правильного ответа, я нашел решение сам. Это можно сделать с помощью переменных QMAKE_EXTRA_TARGETS и PRE_TARGETDEPS и определения пользовательских целей. Такие, как для проекта, описанного выше:

В моем .pro файле:

# Build sub project 
subproject.target = subproject 
subproject.commands = cd $$PWD/go-project/ && \ 
         make 

QMAKE_EXTRA_TARGETS += subproject 
PRE_TARGETDEPS += subproject 

QMAKE_EXTRA_TARGETS добавят дополнительные цели с заданными командами для производства Makefile и PRE_TARGETDEPS будет добавить эту цель, как зависимость от целого проект.

0

Если подпроект был нормальным проектом C/C++, который Qmake мог бы его создать, вы можете создать файл pri для подпроекта и включить его в свой основной проект, но ваш подпроект, написанный на Go и i'am, не уверен, что это может быть построенный через Qmake или нет.

Но вы можете использовать переменные QMake, такие как QMAKE_PRE_LINK. вам нужно создать скрипт bash, который отправляется в исходный каталог подпроекта, настраивает его и создает. теперь вы можете использовать QMAKE_PRE_LINK для указания команд запуска qmake, указанных этой переменной, перед началом соединения.

Положите его в про файл

QMAKE_PRE_LINK = $$ PWD/buildSubproject.sh