У нас довольно большая кодовая база. Подавляющее большинство кода скомпилировано с использованием 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 запускался скрипт?
Вы можете использовать конфигурацию 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