2011-09-08 8 views
0

mon makefile actuelle ressemble aime ceMakefile GNU, c la programmation

all: hello 

hello: hello.o 
    clang -o hello hello.o 

hello.o: hello.c 
    clang -Wall -std=c99 -c -o hello.o hello.c -lpthread 

clean: 
rm -f *.o *exe hello 

Comment puis-je modifier pour compiler ce qui suit:

clang -std=gnu99 -Wall -o hello hello.c -lpthread 
+0

'* exe' semble dangereux pour moi, peut-être que vous vouliez dire' * .exe', mais sous Mac OS X, il me semble un peu inutile. .. –

+2

Quelle est exactement votre question? Demandez-vous comment modifier une ligne de texte en la remplaçant par une autre ligne de texte? Vous pouvez utiliser un outil appelé un éditeur. Je suis sûr qu'il y en a un ou deux pour le Mac. –

+0

@Amardeep oui j'ai utilisé un éditeur, mais j'ai des erreurs et j'ai essayé d'autres façons. J'ai juste pensé que je devrais peut-être poser la question directement pour que ce soit simple à comprendre. – user870565

Répondre

1

Essayez ceci - généralement mieux pour faire le la compilation est quelques étapes.

all: hello 

hello: hello.o 
    clang -o hello hello.o -lpthread 

hello.o: hello.c 
    clang -Wall -std=c99 -c -o hello.o hello.c 

clean: 
rm -f *.o hello 
4

Utilisez

hello: hello.c 
    clang -std=gnu99 -Wall -o hello hello.c -lpthread 

au lieu des deux règles que vous avez pour bonjour et hello.o maintenant. Lorsque votre programme s'agrandit, cependant, la séparation de la compilation en fichiers objet et en liaison peut à un moment donné être plus rapide que de compiler et de tout relier en une seule fois. Avec des unités de compilation séparées et de compilation qui ne sont pas modifiées, il n'est pas nécessaire de les recompiler à chaque fois.

1

Votre modification nécessite de changer une seule ligne; mais au contraire, vous devez utiliser certaines variables pour le rendre plus propre:

# C compiler 
CC = clang 
# Additional libraries 
LIBS = -lpthread 
# Compiler flags 
CCFLAGS = -std=gnu99 -Wall $(LIBS) 
# Output executable 
OUT = hello 

all: hello 

hello: hello.o 
    $(CC) $(CCFLAGS) -o $(OUT) hello.o 

hello.o: hello.c 
    clang $(CCFLAGS) -c -o hello.o hello.c 

clean: 
    rm -f *.o $(OUT)