2011-09-08 4 views
0

내 현재 메이크 좋아에게 보이는이GNU 메이크, C 프로그래밍

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 
+0

'* exe' 나에게 위험한 소리, 어쩌면 당신은 * .exe'하지만, 맥 OS X에 나에게 조금 무의미한 것 '을 의미. .. –

+2

당신의 질문은 정확히 무엇입니까? 텍스트 행을 다른 텍스트 행으로 대체하여 텍스트 행을 수정하는 방법을 묻고 있습니까? 편집기라는 도구를 사용할 수 있습니다. Mac에는 하나 또는 두 가지가있을 것입니다. –

+0

@Amardeep 예 편집자를 사용했지만 오류가 발생하여 다른 방법을 시도했습니다. 나는 그저 이해할 수 있도록 질문을 곧바로해야한다고 생각했습니다. – user870565

답변

1

을 - 일반적으로 가장 잘 할 컴파일은 몇 단계입니다. 대신 당신이 지금 인사와 hello.o에 대한이 두 가지 규칙

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

사용

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

.

그러나 프로그램이 커지면 컴파일을 오브젝트 파일로 분리하고 링크하는 것이 한 번에 모든 것을 컴파일하고 링크하는 것보다 더 빠를 수도 있습니다. 분리 된 컴파일 및 링크되지 않은 컴파일 단위는 매번 다시 컴파일 할 필요가 없습니다.

1

수정하면 한 줄만 변경하면됩니다. 대신, 당신이 그것을 청소하기 위해 몇 가지 변수를 사용한다 :

# 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)