Как связать имя файла с пользовательскими функциями в make-файле - PullRequest
0 голосов
/ 13 июня 2019

У меня есть make-файл, который огромен и довольно сложен. Поэтому я хотел разделить это. Разделяясь, я столкнулся с интересной проблемой.

Предположим, у меня есть некоторые пользовательские функции в некотором make-файле, т.е. tools.mk, compile.mk и test.mk

tools.mk выглядит как

define clean
    rm -rf some_folder
endef

compile.mk выглядит как

define generate_binaries
    ...
    creates some executables
    ...
endef

test.mk выглядит как

define run_test
    /bin/sh runtest.sh
endef

Теперь мой Makefile берет все эти пользовательские функции и выполняет некоторую работу. Похоже

include tools.mk
include compile.mk
include test.mk

.PHONY: build
build:
    $(call clean)
    $(call run_test)
    $(call generate_binaries)

Здесь возникает проблема. Теперь я не знаю, в каком файле определена функция очистки. Таким образом, отладка будет проблемой, если сложность и масштаб возрастут. Вместо этого я хочу что-то вроде этого

include tools.mk as tools
include compile.mk as compile
include test.mk as test

.PHONY: build
build:
    $(call tools.clean)
    $(call test.run_test)
    $(call compile.generate_binaries)

Может кто-нибудь сказать мне, как этого добиться? Заранее спасибо:)

Ответы [ 2 ]

2 голосов
/ 13 июня 2019

Вы не можете делать что-либо даже удаленно, как это:

include tools.mk as tools

Но вы можете запустить make -p, и он покажет вам, где именно были определены все ваши переменные.

0 голосов
/ 16 июня 2019

Эта проблема существует и в C, где не существует пространств имен, а модули импортируются с использованием #include.

Традиционное решение в C, и то, которое я использовал для решения этой точной проблемы вmakefiles - префикс всех имен, определенных в make-файле, с префиксом, обозначающим это имя модуля.

Пример test.mk:

define test_run_test
    /bin/sh runtest.sh
endef

и соответствующий Makefile:

build:
    $(call tools_clean)
    $(call test_run_test)
    $(call compile_generate_binaries)

Как только вы привыкнете к этому, вы также придумаете имена, которые лучше соответствуют этому соглашению.

...