2010-06-14 4 views
4

Existe-t-il un mécanisme permettant de prendre en compte les règles implicites globales par défaut disponibles n'importe où, de manière similaire aux règles intégrées? Make fournit des règles intégrées pour compiler des fichiers C/C++/Fortran, sans même avoir besoin d'un Makefile pour les cas simples. Toutefois, lors de la compilation d'autres langues (par exemple, les fichiers de langue de programmation Go), un Makefile est toujours requis. Je voudrais étendre mon Makeenvironment pour avoir des règles implicites disponibles par défaut.Règle par défaut dans Make

Répondre

6

Ceci n'est normalement pas souhaitable, car cela rendrait votre fichier Makefile moins portable; cela ne fonctionnerait pas sur la machine de quelqu'un d'autre s'ils ne l'avaient pas configuré de cette façon. Cependant, si vous voulez faire cela, créez un Makefile "global" quelque part avec vos règles par défaut pour les fichiers Go, puis ajoutez son chemin à la variable d'environnement MAKEFILES. Ce Makefile global sera traité avant tout Makefile lorsque vous lancerez "make", comme si vous aviez inclus sa source en haut du fichier.

+1

Merci! D'accord avec votre prudence. Cependant, je voudrais compiler du code jetable sans écrire Makefiles tout le temps. – notnoop

3

Je suppose que vous faites allusion au fait que vous pouvez faire

make hello.o 

et faire saura automatiquement comment faire le .o à partir d'un fichier .c (ou même d'un .f ou .p, si il existe) - mais vous voulez faire pour les types de fichiers personnalisés (par exemple, la construction d'un .bar d'un .foo

La façon la plus portable de faire est la suivante (dans votre Makefile.):

.SUFFIXES: .foo .bar 
.foo.bar: 
     foo2bar -in $> -out [email protected] 

La première ligne (.SUFFIXES) prévient que vous allez les traiter comme des suffixes spéciaux; la deuxième ligne dit « voici une recette pour faire un .bar d'un .foo La troisième ligne donne la commande pour ce faire - $> et [email protected] se changer par marque à l'entrée et les noms de fichiers de sortie

REMARQUE:.. Le tiret du la troisième ligne DOIT être un caractère de tabulation

Une méthode beaucoup plus flexible, qui ne fonctionne qu'avec GNU make, est d'utiliser sa prise en charge pour implicit rules Si vous pouvez garantir que vous utiliserez GNU make, cela sera probablement

3

Bien que je sois d'accord avec dmazzoni, je voudrais juste ajouter ma recette pour un Go Makefile:

# Include default Golang Make magic 
include $(GOROOT)/src/Make.$(GOARCH) 

# Hack the following line  
your_program: your_program.$O 
    $(LD) -o [email protected] $^ 

# Compiles .go-files into architecture-specific binaries 
%.$O: %.go 
    $(GC) -o [email protected] $^ 

clean: 
    rm your_program *.$O 

(Note: le $O est DOLLAR + MAJUSCULES-o - zéro!)

Bien que je ne l'ai pas testé sur toutes les machines dont je dispose, je crois qu'il devrait le port assez bien.

+0

Ah, encore plus simple: http://github.com/jlouis/go-blip/blob/master/Makefile (ne l'ai pas encore testé ...) –

Questions connexes