J'essaie de comprendre pourquoi je ne peux pas spécifier une cible comme étant dans un répertoire différent. J'essaie de générer des classes php à partir de fichiers json, mais j'ai changé la ligne qui génère réellement le php en une déclaration d'écho factice, donc quelqu'un d'autre peut simplement copier coller et tester si elles se sentent très généreux.Comment spécifier une cible makefile dans un répertoire différent?
Il y a deux autres choses à ajouter au répertoire contenant le makefile:
- Un fichier de dépendance factice appelé PatientDbPath.json
- Un répertoire appelé à
Si j'ai un makefile par ce qui suit:
.SUFFIXES: .php .json
.json.php:
echo "HelloMe" > PatientDbPath.php
PatientDbPath.php: PatientDbPath.json
clean:
$(RM) PatientDbPath.php
Puis tout fonctionne quand je exécuter make; PatientDbPath.php est correctement créé et la prochaine fois que je lance make, je reçois le message make: 'PatientDbPath.php' is up to date.
Cependant, je veux générer le fichier php dans un répertoire distinct, donc je mis à jour mon makefile à ce qui suit:
.SUFFIXES: .php .json
.json.php:
echo "HelloMe" > out/PatientDbPath.php
out/PatientDbPath.php: PatientDbPath.json
clean:
$(RM) out/PatientDbPath.php
Dès que je fais cela, Make me dit make: Nothing to be done for 'out/PatientDbPath.php'
même s'il n'y a pas de fichier PatientDbPath.php dans le répertoire out.
Alors j'ai pensé que c'était peut-être quelque chose avec les règles du suffixe et j'ai créé un troisième makefile.
out/PatientDbPath.php: PatientDbPath.json
echo "Whatever" > out/PatientDbPath.php
clean:
rm out/PatientDbPath.php
Celui-ci fonctionne bien, comme le premier. Est-ce que quelqu'un peut voir ce que je fais mal dans mon deuxième makefile?
Merci.
Merci pour la réponse, je vais essayer de changer mon vrai makefile pour utiliser la notation suggérée. Je vais suivre ou marquer la réponse très bientôt. En ce qui concerne les problèmes conceptuels, ce que j'ai posté ici est juste un exemple de makefile qui montre le problème, pas comment mon makefile réel. –
Très bien, je l'ai testé et vous aviez absolument raison, en changeant mon makefile pour utiliser 'out /%. Php:% .json' a fait l'affaire. J'ai une question de suivi. Dois-je créer une règle distincte pour chaque fichier .json dans ce répertoire? –
J'ai trouvé une solution pour ce que je voulais, fondamentalement je dois ajouter la ligne suivante: 'all :: $ (patsubst% .json, out /% .php, $ (joker * .json))' Cela ajoutera une dépendance de chacun des fichiers php à générer à partir de chacun des fichiers .json dans ce répertoire –