2016-11-22 1 views
2

아래는 내 메이크 메이크를 통해 일부 줄 바꿈입니다 :출력이

enter image description here

: 디렉토리에 위의 플래그와 몇 개의 파일로

TARGET = prog 
LIBS = -lm 
CC = gcc 
CFLAGS = -pthread -Wextra -Wall -Wundef -Wshadow -Wpointer-arith -Wcast-align -Wstrict-prototypes -Wwrite-strings -Waggregate-return -Wcast-qual -Wswitch-default -Wswitch-enum -Wconversion -Wunreachable-code 

.PHONY: clean all default 

default: $(TARGET) clean 
all: default 

OBJECTS = $(patsubst %.c, %.o, $(wildcard *.c)) 
HEADERS = $(wildcard *.h) 

%.o: %.c $(HEADERS) 
    $(CC) $(CFLAGS) -c $< -o [email protected] 

.PRECIOUS: $(TARGET) $(OBJECTS) 

$(TARGET): $(OBJECTS) 
    $(CC) $(OBJECTS) -Wall $(LIBS) -o [email protected] 

clean: 
    -rm -f *.o 

, 출력은 매우 어려운 경고를 찾을 수 있습니다

GCC을 호출 할 때마다 줄 바꿈을 어떻게 할 수 있습니까? 어쩌면 경고가 좀 더 돋보일 수 있을까요?

+0

'@echo Compiling $ <; @ $ (CC) $ (CFLAGS) -c $ <-o $ @;'? – user657267

+0

@ user657267 로그인하여 신용을 얻을 수 있도록 답변 해주십시오. 그게 내가 찾은 가장 깨끗하고 간단한 대답이야, 고마워. – 8protons

답변

1

명령 자체를 조용히하고 더 짧은 것으로 바꿀 수 있습니다.

CPPFLAGS := -MMD -MP 
CFLAGS := -pthread -Wextra -Wall -Wundef -Wshadow -Wpointer-arith -Wcast-align -Wstrict-prototypes -Wwrite-strings -Waggregate-return -Wcast-qual -Wswitch-default -Wswitch-enum -Wconversion -Wunreachable-code 
LDLIBS := -lm 

objects := $(patsubst %.c, %.o, $(wildcard *.c)) 
deps := $(objects:.o=.d) 

.PHONY: all clean 

prog: $(objects) 
    $(LINK.o) $^ $(LDLIBS) -o [email protected] 

%.o: %.c 
    @echo Compiling $< 
    @$(COMPILE.c) -o [email protected] $< 

clean: ; $(RM) $(objects) $(deps) 

-include $(deps) 

다른 몇 가지 :

  • cc에 기본값을 CC을 내장 조리법 메이크업의에서 사용
  • LDLIBS 도서관의 표준 변수가 :==에 선호하는 기본 컴파일러에 대한 링크 여야합니다. 일반적으로 설정할 필요가 없습니다. CC
  • 병렬 끊어집니다
  • 귀하의 default 대상 (-j)를 구축, 나는
  • 이 메이크 단지 대상
  • wildcard 및 소스와 조심 첫 번째 규칙으로 만드 all 규칙을 필요로하지 않는다 그것을 신경 쓰지 것 그냥 사용, 당신은 각각의 오브젝트 파일을 만들고있어 수동으로
  • 그들을 지정하는 모든 헤더에 의존하는 것이 더 안전 내장 대신 depedency 생성 (-MMD -MP, include)는
  • 메이크업 이미 연결 및 컴파일 개체에 대한 조리법을 가지고, 재사용
  • 기본값을 만드는 것 $(RM) to rm -f
+0

빠른 추가 :'$ (COMPILE.c)'앞에'@'을 두는 대신'$ (Q)'가 정상적으로 해석되는'$ (Q)'를 사용할 수 있습니다. '$ (V)'가 1로 설정된 경우 비어 있습니다. 이렇게하면 디버깅하는 경우'make V = 1'을 입력하여 전체 명령을 볼 수 있습니다. – user2766918