我有一个脚本压缩我的CSS文件并输出输出文件的文件名.
我正在尝试构建一个makefile来自动化该过程:
all:
@echo "Compiling CSS"
CSS_OUTPUT=$(shell php minify_css.php )
echo $(CSS_OUTPUT)
Run Code Online (Sandbox Code Playgroud)
我正在尝试将输出文件名存储在CSS_OUTPUT变量中,但我做错了,因为整个makefile只是打印出来:
$ make
abcdefg.css
Compiling CSS
CSS_OUTPUT=
echo
Run Code Online (Sandbox Code Playgroud)
因此未分配输出CSS_OUTPUT.另外,为什么php输出之前打印@echo "Compiling CSS"?
我试过这个:
all:
@echo "Compiling CSS"
CSS_OUTPUT=$(shell echo php minify_css.php )
echo $(CSS_OUTPUT)
Run Code Online (Sandbox Code Playgroud)
但它只会变得更糟:
$ make
Compiling CSS
CSS_OUTPUT=php minify_css.php
./minify_css.php: line 1: ?php: No such file or directory
./minify_css.php: line 3: syntax error near unexpected token `dirname'
./minify_css.php: line 3: `require_once( dirname(__FILE__) . DIRECTORY_SEPARATOR . 'maintenance.php' );'
make: *** [css] Error 2
Run Code Online (Sandbox Code Playgroud)
编辑 根据评论中提供的答案,建议使用eval:
@echo "Compiling CSS"
$(eval CSS_OUTPUT:=$(shell php minify_css.php))
echo ${CSS_OUTPUT}
Run Code Online (Sandbox Code Playgroud)
输出:
make: *** No targets specified and no makefile found. Stop.
Run Code Online (Sandbox Code Playgroud)
eri*_*ous 11
分两个阶段进行.首先,它读入makefile,评估变量并构建依赖图.在此阶段还要对功能进行评估.在第二阶段,它执行必要的配方来更新主目标.这意味着$(shell ...)在第一阶段,在运行任何配方之前,函数调用将被扩展.该命令的输出代替shell函数调用,但我怀疑php命令的输出没有转到STDOUT,所以不是最终得到CSS_OUTPUT=abcdefg.css(这将是你想要的),abcdefg.css而是回显到屏幕和shell函数的结果为空.
接下来执行配方,但是当完成此操作时,每一行都在一个单独的shell实例中运行,因此配方中不同行上的命令无法访问另一行上设置的shell变量(在这种情况下无论如何都是无用的) ,因为上一期).解决这个问题的一种方法是通过用分号和反斜杠结束线将它们粘合在一起.现在,它们在单个shell实例中作为一行执行.
另一个问题是在配方的最后一行,你没有引用shell变量(这是CSS_OUTPUT是什么),而是引用一个从未设置过的makefile变量.
你有没有理由不这样做:
all:
@echo "Compiling CSS"
php minify_css.php
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
21040 次 |
| 最近记录: |