Est-ce que makefile
recherche des répertoires par défaut qui ne sont pas explicitement spécifiés?Est-ce que tout est explicite pour makefile de C++?
Répondre
Par défaut, le seul répertoire recherché par make
est le répertoire actuel. Vous pouvez changer cela avec la fonction view-path (si votre version de make
le supporte - GNU Make le supporte, par exemple - recherchez VPATH), ou en écrivant des règles plus complexes, ou en utilisant des noms avec des composants path.
Alors oui, tout est explicite, n'est-ce pas? Je suis confus par le comportement par défaut d'IDE, qui cache la vérité avec beaucoup d'internes/par défaut. Donc si makefile n'agit pas comme ça, je suis déterminé à l'apprendre! – Mask
oui s'il vous plaît apprendre faire le rendra votre vie plus facile ... j'ai toujours alwasy avoir le même problème avec IDE qui cache tous les détails – stefanB
@ Masque: "Tout" n'est pas explicite, mais les chemins sont. Les chemins font des soucis à ce sujet, le compilateur a des chemins par défaut pour les inclusions et similaires. Make a aussi un tas de règles implicites par défaut. – dmckee
Pour répondre à ce qui semble être votre question ... make ne fera que regarder dans le répertoire courant (bien que vous puissiez invoquer make avec l'option "-f" pour spécifier un makefile qui n'est pas nommé "Makefile" ou est situé dans un répertoire différent, vous pouvez également appeler make avec l'option "-C" pour exécuter dans un répertoire différent, et vous pouvez inclure un makefile - éventuellement situé ailleurs - depuis l'intérieur d'un autre makefile); cependant, pour répondre à la question plus générale de savoir si tout dans votre makefile doit être donné explicitement ...
Tout dans un Makefile ne doit pas être donné explicitement. Make a plusieurs règles intégrées qui lui permettent de construire des choses automatiquement. Par exemple, $ (CXX), le compilateur C++ est défini par défaut, et Make peut construire un fichier qui se termine par ".o" à partir d'un fichier portant le même nom qui se termine par ".cpp" automatiquement. Ainsi, par exemple:
program_NAME := myprogram program_SRCS := $(wildcard *.cpp) program_OBJS := ${program_SRCS:.cpp=.o} $(program_NAME) : $(program_OBJS) $(CXX) $(program_OBJS) -o $(program_NAME) $(CXXFLAGS) $(LDFLAGS)
Le makefile ci-dessus est suffisante pour construire « myprogram » en utilisant tous les fichiers « .cpp » dans le répertoire courant, et notez que la seule étape de construction explicite est la mise en relation ... il utilise des règles de compilation automatique pour la compilation.
Si vous souhaitez contrôler les différents drapeaux, vous pouvez ajouter des entrées à CXXFLAGS et LDFLAGS tels que:
CXXFLAGS += -I./include -DHAVE_UNISTD_H -Wall -pedantic LDFLAGS += -L./thirdparty/libs -lm -lboost
Ajoutez juste les déclarations avant que les règles de construction. Cela dit, je vous encourage à jeter un oeil au système de construction CMake, car il est beaucoup plus simple, plus susceptible d'être portable, et plus difficile à vous tirer dans le pied. Bien qu'il soit possible de créer des makefiles très portables, il est également très facile d'utiliser des éléments spécifiques à la plate-forme et même à la configuration de votre Makefile, ce qui fait de CMake un meilleur choix de système de construction.
Si vous souhaitez en savoir plus sur CMake, vous pourriez être intéressé à regarder la CMake Google Techtalk, la lecture Why KDE switched to CMake, visiter le CMake wiki et bookmarking le CMake Manual. Vous pouvez également utiliser le C++ Application Project Template et le C++ Library Project Template, tous deux utilisant CMake et vous offrant un projet facile à démarrer.
Si vous souhaitez en savoir plus sur Makefiles, vous pouvez être intéressé par mon guide How-To Write a Makefile.
J'utilise eclipse cdt, qui génère beaucoup de fichiers, je suis confus quels fichiers sont essentiels à l'application et comment chacun fonctionne. C'est pourquoi je décide d'apprendre makefile. – Mask
@Mask, le cdt Eclipse génère des makefiles absolument horribles, ne les regardez pas. Il suffit de google un bon tutoriel et apprendre de cela. – NomeN
- 1. Que signifie "tout" dans un fichier makefile?
- 2. C# initialisation explicite pour Enum
- 3. C# explicite chaîne de CAST pour ENUM
- 4. Quel est le mot clé explicite pour en C++?
- 5. quoi, en plus de la source, provoquerait l'exécution d'une règle explicite pour produire une cible makefile?
- 6. Distribution explicite en C
- 7. Erreur C++: qualification explicite
- 8. comment est-ce que je fais cela pour que tout puisse l'utiliser? C++
- 9. Makefile pour les tests unitaires en C++
- 10. conversion explicite existe C#
- 11. Les états de persistance explicite dans Workflow 4.0 plutôt que tout
- 12. c makefile rcv ranlib
- 13. Que signifient ces constructions Makefile?
- 14. C# interface explicite membre annoncez
- 15. Est-ce que cela nécessite une synchronisation explicite?
- 16. Efficacité de l'initialisation explicite
- 17. Coulée explicite de types dérivés C#
- 18. Que signifie CC? = Dans un Makefile?
- 19. C modèle explicite de l'instanciation d'un opérateur
- 20. Quel est le problème avec ce Makefile?
- 21. makefile pour java
- 22. C++ invoquer le constructeur de modèle explicite
- 23. C#: Délégué d'action vs délégué explicite
- 24. Alternative Makefile natif pour Windows
- 25. standard F90 Bibliothèque pour Makefile
- 26. Confusion avec C# Enum et conversion explicite
- 27. VS solution pour makefile
- 28. Est-ce que SqlDataReader stocke tout en tant que chaîne?
- 29. makefile camelcase pattern matching
- 30. Est-ce que JSON exige que tout soit cité?
Vous pouvez trouver le manuel GNU make utile - http://www.gnu.org/software/make/manual/make.html – jschmier
Makefile est la description du projet ... le programme est Make. –