GNU Makefile, c программированием - PullRequest
0 голосов
/ 08 сентября 2011

мой текущий make-файл выглядит следующим образом

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

Как я могу изменить его для компиляции со следующим:

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

Ответы [ 3 ]

4 голосов
/ 08 сентября 2011

Используйте

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

вместо двух правил, которые у вас сейчас есть для hello и hello.o.

Однако, когда ваша программа становится больше, разделение компиляции на объектные файлы и компоновка может в какой-то момент быть быстрее, чем компиляция и компоновка всего за один раз. При использовании отдельных модулей компиляции и компоновки, которые не изменены, нет необходимости каждый раз перекомпилировать.

1 голос
/ 08 сентября 2011

Ваша модификация требует только изменения одной строки; но вместо этого вы должны использовать некоторые переменные, чтобы сделать его чище:

# 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)
1 голос
/ 08 сентября 2011

Попробуйте это - обычно лучше всего выполнить компиляцию в несколько шагов.

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