add_definitions ajoute une définition qui est fixée au moment où cmake (not make) est exécuté. Comment les définir quand make (pas cmake) est exécuté? La valeur de la définition sera une sortie d'une commande personnalisée.Comment définir les indicateurs du compilateur lors de la compilation en utilisant CMake?
Répondre
Voici un exemple d'un fichier de marque:
.SUFFIXES: .c.o CC = cc INCLUDE = -I/usr/include -I/usr/sys/include # Comment out one or the other, mutually exclusive CFLAGS = -g # Debugging info #CFLAGS = -O2 # Optimize code LIBS = -L/usr/lib -L/usr/sys/lib -lsome_lib1 -lsome_lib2 # Debugging libs #LIBS = -L/usr/lib # Release FILES = mysource.o myroutines1.o myroutines2.o APP = myapp .c.o: $(CC) $(INCLUDE) $(CFLAGS) -c $< all : $(APP) $(APP) : $(FILES) $(CC) -o [email protected] $(FILES) $(LIBS) $(CFLAGS) clobber : clean mrproper clean: rm -rf $(FILES) mrproper: rm -rf $(APP)
Remarquez comment est défini le drapeau CFLAGS
. Commentez l'autre selon que vous faites un débogage ou une version validée ..
L'exemple ci-dessus est un fichier de faire de mon tutoriel pour la construction d'un exécutable appelé myapp
qui compose de mysource.c
, myroutines1.c
et myroutines2.c
. Et il montre comment faire est assez intelligent pour construire un exécutable sans recompilation.
Note Le fichier makefile a une orientation unix/linux et est très strict sur les onglets/espaces qui n'apparaissent pas dans l'exemple ci-dessus!
Espérons que cela aide, Cordialement, Tom.
Je ne suis pas sûr que je comprends la question, mais ...
Peut-être que vous pourriez utiliser une macro supplémentaire pour fournir la ligne de commande C drapeaux du compilateur, par exemple:
CFLAGS= <whatever>
CFLAGS2= #nothing
.c.o:
$(CC) $(INCLUDE) $(CFLAGS) $(CFLAGS2) -c $<
Ensuite, lorsque vous exécutez la commande make
, fournissez un argument de ligne de commande "CFLAGS2=xxx"
, qui remplace le paramètre par défaut dans le fichier makefile.
Mise à jour
Eh oui, je ne comprenais pas la question de l'OP. Alors, veuillez ne pas tenir compte.
@Loadmaster: J'ai fait la même chose ici mais je suis tombé en panne car je ne comprends pas la question de l'OP - il a dit 'quand make (pas cmake) est exécuté?' ... – t0mm13b
. CMake génère un makefile sur la plate-forme Linux, donc je ne peux pas le modifier directement. –
@Lukasz Lew: Ahh ... pas étonnant ... je suis downvoted ... lol ... – t0mm13b
Vous trouverez peut-être quelques trucs utiles ici:? Comment les définir quand faire (non cmake) est exécuté 'How to run a command at compile time within Makefile generated by CMake?
Ne pas comprendre pourquoi cela a été downvoted comme OP clairement indiqué en d'autres termes, comment les définir dans un makefile, c'était ma compréhension? Corrigez-moi si j'ai mal compris? – t0mm13b
Je ne suis pas l'OP, et c'est un peu en retard ... mais ... j'imagine que l'OP (comme moi) est à la recherche d'une commande CMake qui implémente cette logique dans les Makefiles générés automatiquement. L'édition manuelle de Makefiles n'est pas une option. –
@MattB: Oh ... j'ai oublié celui-là ... un peu trop tard !!! Je sais qu'il y a une interface graphique CMake ... pas beaucoup de réponse mais plus d'un point dans la direction pour voir s'il y a une option sur l'interface graphique CMake pour le faire pour vous et voir ce qu'elle génère ... – t0mm13b