J'ai un makefile, et un extrait ressemble à ceci (les fichiers et les cibles rebaptisés pour plus de clarté):dépendances dans makefile
target1 : OtherLib.o MyProg.h MyProg.cpp g++ -c ./MyProg.cpp -o $(BUILD_DIR)/MyProg.o
Quand je lance « make TARGET1 », je veux faire de vérifier que MONPROG .h et MyProg.cpp sont à jour et lancent target1 sinon. Cependant, j'obtiens l'erreur
make: *** No rule to make target `MyProg.cpp', needed by `target1'. Stop.
Mais 'MyProg.cpp' est ce que j'essaye de compiler! Donc, j'ai fait une cible vide pour cela, comme ceci:
MyProg.h : MyProg.cpp : target1 : OtherLib.o MyProg.h MyProg.cpp g++ -c ./MyProg.cpp -o $(BUILD_DIR)/MyProg.o
Cela fonctionne, mais cela semble bizarre. Je suis sous l'impression que si je fais simplement ceci:
target1 : OtherLib.o g++ -c ./MyProg.cpp -o $(BUILD_DIR)/MyProg.o
alors MONPROG seront compilés indépendamment du fait que oui ou non il est à jour, parce que MyProg.cpp ne figure pas comme une dépendance. Quelle est la bonne façon de faire cela pour que make ne compile MyProg.o que si MyProg.cpp et MyProg.h ne sont pas à jour?
Ma règle d'or pour la compilation heureux - jamais, jamais utiliser des noms de fichiers de casse mixte. –
Ou des noms de fichiers ou des dossiers avec des espaces. Provoque tant de problèmes avec l'analyse de la ligne de commande. –