2009-12-11 5 views

Répondre

-3

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.

+0

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

+5

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. –

+0

@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

-5

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.

+0

@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

+1

. CMake génère un makefile sur la plate-forme Linux, donc je ne peux pas le modifier directement. –

+0

@Lukasz Lew: Ahh ... pas étonnant ... je suis downvoted ... lol ... – t0mm13b

Questions connexes