Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Makefile中动态设置全局变量_Makefile_Gnu Make_Gnu - Fatal编程技术网

在Makefile中动态设置全局变量

在Makefile中动态设置全局变量,makefile,gnu-make,gnu,Makefile,Gnu Make,Gnu,我在Makefile中有以下代码,它根据环境变量执行一个或另一个命令序列 generate : if test -z "$$VIRTUAL_ENV"; then \ $(PYTHON) -m fades -V &>/dev/null || $(PYTHON) -m pip install --user fades; $(PYTHON) -m fades -r requirements.txt script.py;"; \

我在Makefile中有以下代码,它根据环境变量执行一个或另一个命令序列

generate :
            if test -z "$$VIRTUAL_ENV"; then \
                $(PYTHON) -m fades -V &>/dev/null || $(PYTHON) -m pip install --user fades; $(PYTHON) -m fades -r requirements.txt script.py;"; \
            else \
               python -m pip install -r requirements.txt && python script.py;  \
            fi
它按预期工作,但我希望在多个目标上执行相同的操作,在其他文件上使用它,而不必多次复制此代码片段

我的想法是动态设置一个变量(基于已计算的条件),其中包含一个或另一个命令,以便反复使用,就像Bash中的
alias


这是个好主意吗?是否可以在
Makefile
中设置全局别名,以便它可以根据环境变量在两个Python解释器之间进行选择?

假设您使用的是GNU make,您可以这样做:

ifdef VIRTUAL_ENV
  PYCMD = python -m pip install -r requirements.txt && python
else
  PYCMD = $(PYTHON) -m fades -V >/dev/null 2>&1 || $(PYTHON) -m pip install --user fades; $(PYTHON) -m fades -r requirements.txt
endif

generate:
        $(PYCMD) script.py
注意:我将
&>/dev/null
更改为
/dev/null 2>&1
,因为前者是仅限bash的功能,在POSIX sh中无效,并且make(默认情况下)始终运行
/bin/sh
,这在许多系统上是POSIX sh


我不知道你为什么在一节中使用
python
,在另一节中使用
$(python)
;似乎您希望在这两种应用中使用相同的功能,但无论如何。

假设您使用的是GNU make,您可以这样做:

ifdef VIRTUAL_ENV
  PYCMD = python -m pip install -r requirements.txt && python
else
  PYCMD = $(PYTHON) -m fades -V >/dev/null 2>&1 || $(PYTHON) -m pip install --user fades; $(PYTHON) -m fades -r requirements.txt
endif

generate:
        $(PYCMD) script.py
注意:我将
&>/dev/null
更改为
/dev/null 2>&1
,因为前者是仅限bash的功能,在POSIX sh中无效,并且make(默认情况下)始终运行
/bin/sh
,这在许多系统上是POSIX sh


我不知道你为什么在一节中使用
python
,在另一节中使用
$(python)
;您似乎想在这两个方面都使用相同的功能,但无论如何。

谢谢。如果设置了VIRTUAL_ENV,我将使用
python
,因为它使用virtualenv中定义的解释器<代码>$(PYTHON)可能是一条绝对路径,它会破坏它。谢谢。如果设置了VIRTUAL_ENV,我将使用
python
,因为它使用virtualenv中定义的解释器<代码>$(PYTHON)可能是一条绝对路径,它会破坏它。