从makefile调用shell脚本?

时间:2012-09-06 00:00:29

标签: node.js shell permissions makefile executable

我有一个自定义shell脚本从源代码生成twitter引导程序,然后将文件移动到我的node.js app的/ lib文件中:

rm -r bootstrap
make bootstrap
mv -f bootstrap/css/* ../../lib/public/css
mv -f bootstrap/img/* ../../lib/public/img
mv -f bootstrap/js/* ../../lib/public/js

从shell运行它可以正常使用./make_bootstrap.sh

现在我已经为我的完整应用程序创建了一个Makefile(主要是编译coffeescript和简单的测试初始化​​),并且想要一个执行这个自定义shell脚本的命令来构建bootstrap。这是我的makefile

REPORTER = spec

all: build

build:
    @./node_modules/coffee-script/bin/coffee \
        -c \
        -o lib src

bootstrap:
    @./src/bootstrap \
        ./make_bootstrap.sh

clean:
    rm -rf lib
    mkdir lib

watch:
    @./node_modules/coffee-script/bin/coffee \
        -o lib \
        -cw src

test:
    @./node_modules/mocha/bin/mocha \
        --reporter $(REPORTER) \
        test/*.coffee

.PHONY: build bootstrap clean watch test

相关命令为'make bootstrap'。但是,当我从命令行运行make bootstrap时,我得到的是这个错误:

make: ./src/bootstrap: Permission denied
make: *** [bootstrap] Error 1

最初我假设这是一个权限错误,但即使设置文件的所有权限(chmod 777)也不会产生任何结果。此时我已授予完全权限的文件包括根Makefile,bootstrap文件夹中的自定义shell脚本以及bootstrap文件夹中的makefile。

1 个答案:

答案 0 :(得分:1)

编辑:

根据我对此

重构的评论
bootstrap:
    rm -r src/bootstrap/bootstrap
    $(MAKE) -C ./src/bootstrap bootstrap
    mv -f src/bootstrap/bootstrap/css/* lib/public/css
    mv -f src/bootstrap/bootstrap/img/* lib/public/img
    mv -f src/bootstrap/bootstrap/js/* lib/public/js

这复制了我之前使用的shell脚本的功能(为我的自定义项目移动文件),并且仍然使用Twitter Bootstrap附带的标准makefile。更清洁......我将按照下面的原始答案生活,这样人们就可以看到进化和重构。

老答案

好的,谢谢你们在评论中指出我正确的方向。该解决方案有效:

bootstrap:
    cd ./src/bootstrap; \
        ./make_bootstrap.sh

它会执行更改目录(在子流程中,因此它不会影响我运行make的位置),然后执行自定义脚本。似乎我可能不应该在makefile中使用这样的东西,因为它感觉很脏&#39 ;;或许更干净的方法是自己调用LESS编译器并模仿bootstrap提供的makefile。我将这个用于一个小小的个人项目,但它可以完成这项任务。