为makefile命令

时间:2016-06-07 01:46:37

标签: makefile

我是makefiles的新手我在区分目标路径与make文件存在的位置时遇到了一些麻烦

这是我的Makefile

babel-ready:
    make babel-install-preset module=es2015
    make babel-install-preset module=stage-2

babel-install-preset:
    npm install --save-dev babel-preset-$(module)
    ${CURDIR}/node_modules/.bin/json -I -f package.json -e 'if (!this.babel) this.babel = {}' ;\
    ${CURDIR}/node_modules/.bin/json -I -f package.json -e 'if (!this.babel.presets) this.babel.presets = []' ;\
    ${CURDIR}/node_modules/.bin/json -I -f package.json -e 'this.babel.presets.push("'$(module)'")' ;\

这里是目录结构:

- node_modules
  - .bin/
    - json
- Makefile
- packages/
  - my-package/
        - package.json
 - package.json

我想以三种方式使用这个Makefile。

一种是指定这样的目标。

./ $ make babel-ready package=my-package

两个是在root package.json上运行它。

./ $ make babel-ready 

第三个是在包中,只需运行命令。

./packages/my-package $ make -C ../../ babel-ready

我喜欢它,如果所有三个都可以使用相同的基本代码。

我继续使用cd更改命令中的目录,但它一直让我搞砸了,因为一旦我cd我无法访问make命令,并且必须使用make -C ${CURDIR}但随后我无法访问正确的package.json文件,所以看起来我无法正常工作。

1 个答案:

答案 0 :(得分:0)

您似乎在最后一个示例中寻找make -f ../../Makefile babel-ready-C选项会丢失当前目录,就像您发现的那样。

(我不清楚您的命令是否正确使用${CURDIR},因此您可能需要进行其他调整。)