Как удалить дубликаты кода в файлах проекта QT? - PullRequest
1 голос
/ 31 марта 2020

У меня есть старый файл проекта QT, который содержит несколько раз почти один и тот же раздел конфигурации. Этот раздел конфигурации в основном загружает определенную версию генератора open-api, генерирует заглушки кода QT с генератором open-api и добавляет генерацию кода к зависимостям QT до цели, так что он называется «автоматически».

Упрощенный пример раздела:

OPENAPI_CLI_VERSION = 4.2.3
codegentemp1.target = .codegentemp1
codegentemp1.commands = \
  echo $$PWD/openapi-generator/src/main/resources/api-spec-1.yml \
  $${OPENAPI_CLI_VERSION}.jar ... \
  touch $$codegentemp1.target
QMAKE_EXTRA_TARGETS += codegentemp1
PRE_TARGETDEPS += .codegentemp1

Этот раздел копируется несколько раз и изменяется только несколько переменных, например:

  • api- spe c -1.yml, api-spe c -2.yml, api-spe c -3.yml, ...
  • codegentemp1, codegentemp2, codegentemp3, ...

и несколько переменных остаются неизменными, например:

  • OPENAPI_CLI_VERSION

Вопрос:

Можно ли переместить этот раздел в нечто подобное функции в файлах проекта QT и вызвать эту функцию, например, с помощью:

  • generate_api (4.2.3, codegentemp1, api_spe c -1.yml)

Заранее спасибо!

Обновление 1

Я хочу в основном назначить т В поле «.commands» указан избыточный код сценария оболочки, который содержит переменные аргументы, такие как версия CLI open api (которая может меняться при каждом назначении), то есть что-то вроде:

func1(openapiversion, targetname) {
  echo $$PWD/openapi-generator/src/main/resources/api-spec-1.yml
  OPENAPI-$$openapiversion.jar ...
  touch $$targetname
}

OPENAPI_CLI_VERSION = 4.2.3
codegentemp1.target = .codegentemp1
codegentemp1.commands = func1($$OPENAPI_CLI_VERSION, $$codegentemp1.target)
QMAKE_EXTRA_TARGETS += codegentemp1
PRE_TARGETDEPS += .codegentemp1

1 Ответ

2 голосов
/ 31 марта 2020

Да, руководство по языку qmake говорит о том, как создавать свои собственные функции, чуть ниже раздела о функциях замены :

defineReplace(functionName){
    #function code
}
...