2016-06-07 4 views
0

Ich bin neu in Makefiles ich ein wenig Mühe habe den Zielpfad zu unterscheiden im Vergleich zu dem, wo die Make-Datei hierangeben Ziele für Make-Datei Befehl

existiert mein ist 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)'")' ;\ 

Hier ist die Richt Struktur:

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

Ich möchte dieses Makefile auf drei Arten verwenden.

Eine ist, ein Ziel wie dieses anzugeben.

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

Zwei ist es auf dem root-Paket.json ausführen.

./ $ make babel-ready 

Dritte ist im Paket zu sein und einfach den Befehl ausführen.

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

Ich möchte es, wenn alle drei den gleichen Basiscode auch verwenden könnten.

Ich halte cd mit dem Verzeichnis innerhalb der Befehle zu ändern, aber es hält mich vermasselt, denn sobald ich cd ich keinen Zugang mehr zu dem Befehl make, und haben make -C ${CURDIR} zu verwenden, aber dann habe ich keinen Zugang mehr auf die richtige package.json Datei, so scheint es, als könnte ich nichts zur Arbeit bringen.

Antwort

0

Sie scheinen im letzten Beispiel nach make -f ../../Makefile babel-ready zu suchen. Die -C Option verliert das aktuelle Verzeichnis, wie Sie festgestellt haben.

(Unklar für mich, ob Ihre Befehle richtig verwenden ${CURDIR}, so dass Sie möglicherweise zusätzliche Anpassungen benötigen.)