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
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.
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
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.
Ah, encore plus simple: http://github.com/jlouis/go-blip/blob/master/Makefile (ne l'ai pas encore testé ...) –
Merci! D'accord avec votre prudence. Cependant, je voudrais compiler du code jetable sans écrire Makefiles tout le temps. – notnoop