Makefile использование функции с условным - PullRequest
0 голосов
/ 14 октября 2018

В моем файле make gnu есть несколько команд, которые возвращают true или false

Такие команды, как

apps := $(shell zmr build app)
...more code
service := $(shell zmr build service)
...
target := $(shell zmr build target)

Теперь я хочу улучшить эти команды довернуть также логическое значение true для false

apps,isValid := $(shell zmr build app)
...
service,isValid := $(shell zmr build service)
...
target,isValid := $(shell zmr build target)

, а когда, если isValie равно false, использовать выход в make?

Я пытаюсь прочитать о функцияхкак https://www.gnu.org/software/make/manual/html_node/Conditional-Functions.html#Conditional-Functions

или https://www.gnu.org/software/make/manual/html_node/Eval-Function.html#Eval-Function

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

Я попробовал следующий ответ безуспешно, есть идеи, как мне заставить его работать внутри makefile?

обновление -

Я хочу использовать функцию в моем GNU MAKE, которая получает true или false от c ommand, если получает falseон exit сделает процесс make (то есть, если не выполнить следующую команду, если true, продолжит процесс), как это можно сделать , просто и перейти прямо

Ответы [ 3 ]

0 голосов
/ 23 октября 2018

Ваши потребности уже слишком развиты, чтобы управлять ими только в файле make.

Возможно, вы захотите использовать такой инструмент, как autoconf (см. https://www.gnu.org/software/autoconf/autoconf.html), который позволит вам идеально достичь вашегопотребности, с более четким результатом.

Дайте мне знать, если вам нужна помощь для этого.

0 голосов
/ 31 октября 2018

Хммм, из соображений стиля я бы старался не использовать $(shell …) и использовать рецепты везде, где это возможно.

Сказав это, можно делать то, что вы просите.Я просто предположу, что последним словом является статус.

output := $(shell zmr build app && echo t || echo f)

Здесь t добавляется к выводу zmr, если команда выполнена успешно.В противном случае f добавляется.Теперь мы просто удаляем последнее слово, чтобы отделить статус от вывода команды.

retcode := $(lastword ${output})
apps := $(words 2,$(words ${output}),x ${output})

$(if $(filter f,${retcode}),$(error apps failed))
0 голосов
/ 14 октября 2018

В моем файле make gnu есть несколько команд, которые возвращают true или false

apps := $(shell zmr build app)

Теперь я хочу улучшить эти команды, чтобы они также возвращали логическое значение true для false

apps,isValid := $(shell zmr build app)

когда isValid равно false, используйте exit в make

Если ваши zmr build ... команды выводят true или false, вы можете выйти make с помощью

ifeq (${apps,isValid},false)
$(error app not valid)
endif

make не знает о типах данных, поэтому true и false - всего лишь строки для него.

Я не знаю семантику вашего zmr build, но это звучиткак бы это делало некоторые дорогие вещи ... Операция $(shell ...) обычно предназначена только для коротких команд без побочных эффектов.Возможно, было бы лучше поместить материал isValid в цель

apps,isValid:
    zmr build app

make автоматически потерпит неудачу при сбое этой команды.

...