33Close35
nitroOn the 2011-11-08 at 05:33pm
Folco (./33) :
Comment se fait-il que j'aie un warning (corrigé depuis) "la variable retournée peut ne pas être initialisée" en compilant en -O2, et pas sans ce switch ? Quel rapport ? J'utilise -W -Wall -Wextra -pedantic, pourquoi tout ça ne m'a pas averti ??


En activant les optimisations, gcc effectue des analyses en plus, ce qui lui permet de faire plus de warnings.
Peut-on redéfinir une variable Makefile à partir d'elle-même ?truc = $(truc) -machin


truc += -machin
Je n'ai pas réussi à mettre plus de une ligne à exécuter dans un if/else/endif. Là aussi, il n'y a pas un workaround ?


Normalement ça marche.. fais voir ton code ?
Je fais un "echo" pour indiquer dans la sortie si on compile en DEBUG ou en RELEASE. Je mets ça dans la règle "all", évidemment ça l'affiche tout à la fin (et encore, si il y a quelque chose à faire).
Si je le mets dans la règle "%.o:", ça l'affiche après la compilation de chaque fichier. Ce n'est pas non plus ce que je veux, je voudrais l'afficher en tête du log.

Solution : ??? Rajouter une règle aux .cpp, qui fait l'echo et crée un fichier dont la présence indique de ne pas refaire l'echo ? J'ai même pas essayé, mais de toute façon c'est hyper crade.
Une solution ?


Oui, il faut faire un truc du genre :

all: foo.so foo.a

print-mode:
        @echo mode

foo.so: $(OBJ) | print-mode
        ...

foo.a: $(OBJ) | print-mode
        ...


L'astuce c'est l'utilisation du '|' pour déclarer une dépendance "order-only" (voir http://www.gnu.org/s/hello/manual/make/Prerequisite-Types.html)