Использование встроенного скрипта Python в Makefile

Это зависит немного от где pwiki каталог (или a pwiki.py файл), но принятие его находится в /home/abc/wikidpad/ можно добавить следующее к /home/abc/wikidpad/WikidPad.py перед импорт pwiki.Enum:

import sys
sys.path.insert(0, '/home/abc/wikidpad')

(Замена каталога с каталогом, где Вы нашли pwiki)

4
14.08.2015, 01:40
2 ответа

По теме: https://stackoverflow.com/q/649246/4937930

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

Возможный обходной путь:

export BROWSER_PYSCRIPT
BROWSER := python -c "$$BROWSER_PYSCRIPT"

docs:
        #.. compile docs
        $(BROWSER) docs/index.html
3
27.01.2020, 20:52

Подход Яэгаши будет работать, но придать ему значения «на лету» будет непросто. Команда 'export' выполняется во время анализа Makefile и устанавливает переменную среды оболочки для рецепта. Затем переменная среды оценивается во время выполнения рецепта 'docs'.

Если в вашем сниппете должны быть заполнены какие-либо переменные, зависящие от цели, я бы порекомендовал такой подход:

Быстрый подход

Если вам просто нужно запустить пару однострочников, этот шаблон будет работают довольно хорошо.

run_script = python -c \
"import time ;\
print 'Hello world!' ;\
print '%d + %d = %d' %($1,$2,$1+$2) ;\
print 'Running target \'%s\' at time %s' %('$3', time.ctime())"

test:
    $(call run_script,4,3,$@)

Необычный подход

Если вы хотите использовать странные символы и функции, циклы for или другие многострочные конструкции, вот модный шаблон, который прекрасно подойдет.

#--------------------------- Python Script Runner ----------------------------#

define \n


endef

escape_shellstring = \
$(subst `,\`,\
$(subst ",\",\
$(subst $$,\$$,\
$(subst \,\\,\
$1))))

escape_printf = \
$(subst \,\\,\
$(subst %,%%,\
$1))

create_string = \
$(subst $(\n),\n,\
$(call escape_shellstring,\
$(call escape_printf,\
$1)))

python_script = printf "$(call create_string,$($(1)))" | python

#------------------------------- User Scripts --------------------------------#

define my_script

def good_times():
    print "good times!"

import time
print 'Hello world!'
print '%d + %d = %d' %($2,$3,$2+$3)
print 'Runni`ng $$BEEF \ttarget \t\n\n"%s" at time %s' %('$4', time.ctime())
good_times()

endef

#--------------------------------- Recipes -----------------------------------#

test:
    $(call python_script,my_script,1,2,$@)
3
27.01.2020, 20:52

Теги

Похожие вопросы