Включение файла в директиву define в макфайле - PullRequest
1 голос
/ 19 октября 2010

У меня есть Makefile, определения .mk, содержащий следующее:

ifneq ($(MY_VARIABLE),true)
define my-function
  < some code defining the function)
endef
else
define my-function
 < different code defining the function>
endef
endif

Теперь, если для MY_VARIABLE установлено значение false, я хочу включить другой файл, содержащий определение my-function. Как:

ifneq ($(MY_VARIABLE),true)
define my-function
  < some code defining the function)
endef
else
 <include file containing definition of function>
endif

Проблема в том, что я не могу понять, как это сделать. Если я напишу:

include $(BUILD_SYSTEM)/my_function.mk

Я получу сообщение об ошибке:

/bin/bash/: include: command not found

Итак, как мне это сделать?

Любой вклад приветствуется!

1 Ответ

4 голосов
/ 21 октября 2010

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

ifneq ($(MY_VARIABLE),true)
define my-function
    thing1
    thing2
endef
else
define my-function
    include $(BUILD_SYSTEM)/my_function.mk
endef
endif

То есть у вас есть директива include внутри директива define. Это не сработает, потому что define работает. Помните, что define - это просто синтаксический сахар, облегчающий создание переменных с многострочными значениями. Это означает, что, концептуально в любом случае, это:

define FOO
    something
endef

такой же, как этот:

FOO=something

Итак, я подозреваю, что вы действительно сделали my-function=include my_function.mk. Затем, когда вы пытаетесь сослаться на my-function, он расширяется до include my_function.mk, который впоследствии передается оболочке, что, разумеется, не имеет смысла.

Чтобы было совершенно ясно, вот как вы можете сделать эту работу. Сначала убедитесь, что у вас есть define / endef в my_function.mk:

.
define my-function
    red fish
    blue fish
endef

, а затем в defines.mk вам нужно это:

ifneq ($(MY_VARIABLE),true)
define my-function
    thing1
    thing2
endef
else
    include $(BUILD_SYSTEM)/my_function.mk
endif

Обратите внимание на отсутствие линий define / endef вокруг линии include!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...