我有一个自定义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。
答案 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。我将这个用于一个小小的个人项目,但它可以完成这项任务。