Запуск программы / скрипта из QMake

У нас довольно большая кодовая база. Подавляющее большинство кода скомпилировано с использованием qmake для создания make-файлов. Однако есть некоторые подпроекты, которые создаются при запуске командных файлов или других программ.

Я хотел бы иметь возможность компилировать все, используя qmake, но я могу ' не могу понять, как заставить qmake просто запустить скрипт.

Одна вещь, которую я попробовал, - это использовать QMAKE_EXTRA_TARGETS в моем pro-файле, например так:

TEMPLATE = lib
SOURCES = placeholder.cpp
CONFIG += no_link staticlib
batch_runner.target   = placeholder.cpp
batch_runner.commands = my_batch_file.bat
QMAKE_EXTRA_TARGETS   = batch_runner

Затем мне нужно, чтобы командный файл создавал placeholder.cpp как итак:

# do the real work here
# ...
# create placeholder.cpp so qmake and nmake are happy
echo // dummy >> placeholder.cpp

Кажется, это работает нормально. Беда в том, что это несколько нелепо. Если я не укажу batch_runner.target (то есть оставлю это поле пустым) или не добавлю placeholder.cpp в SOURCES, то пакетный файл никогда не запустится. Это потому, что qmake не делает batch_runner.commands действие для любой другой зависимости в Makefile.

Есть ли лучший способ заставить QMake создать Makefile таким образом, чтобы при запуске Makefile запускался скрипт?

16
задан Tom Hennen 1 September 2010 в 12:39
поделиться

1 ответ

Вы можете использовать конфигурацию SUBDIRS для запуска нескольких разных целей, даже из одного make-файла. Это может особенно хорошо работать с вашими дополнительными целями, так как конфигурация subdir может указать конкретную цель в make-файле для запуска (подробности см. в недокументированном qmake). В этом случае я бы поместил все «обычные» команды сборки в один файл .pro, внешние команды сборки в другой и файл subdirs .pro для их сборки. Ничего подобного я не тестировал, но должно работать.

Regular.pro:

SOURCES += main.cpp
TARGET = regular.exe

external.pro:

batch_runner.commands = my_batch_file.bat
QMAKE_EXTRA_TARGETS   += batch_runner

other_runner.commands = other_batch_file.bat
QMAKE_EXTRA_TARGETS   += other_runner

do_it_all.pro:

TEMPLATE = subdirs
CONFIG += ordered

regular.file = regular.pro
SUBDIRS += regular

batch.file = external.pro
batch.target = batch_runner
SUBDIRS += batch

other.file = external.pro
other.target = other_runner
SUBDIRS += other
1
ответ дан 30 November 2019 в 21:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: