2010-03-26 4 views
2

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++?

+2

Vous pouvez trouver le manuel GNU make utile - http://www.gnu.org/software/make/manual/make.html – jschmier

+1

Makefile est la description du projet ... le programme est Make. –

Répondre

1

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.

+0

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

+1

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

+0

@ 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

0

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.

+0

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

+1

@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