根据make文件中命令的执行结果定义变量

根据make文件中命令的执行结果定义变量

我正在尝试使用 makefile 来捆绑应该依次运行的命令组合。 make 文件的一部分如下所示;

.PHONY: dispersion
all: dispersion


-include make.in

dispersion:
    phonopy --qe -d --dim='$(nx) $(ny) $(nz)' -c $(material)_primitive.in 
    $(eval VAR=$(shell grep nat supercell.in))
    echo $(VAR)

基本上,第一行创建一个名为“supercell.in”的文件,第二行创建一个名为 VAR 的变量,该变量将在后续行中使用。上面没有给变量赋值,我猜这是由于行执行的优先级所致。我希望知道解决这个问题的方法。

答案1

尝试使用反引号运算符来运行命令。

.PHONY: dispersion
all: dispersion


-include make.in

dispersion:
    phonopy --qe -d --dim='$(nx) $(ny) $(nz)' -c $(material)_primitive.in
    $(eval VAR=`grep nat supercell.in`)
    echo $(VAR)

我相信问题是$(shell)由于口译员评估时造成的。

相关内容