2016-11-22 7 views
2
以下

を通していくつかの改行が私のメイクファイルである:上記のフラグとディレクトリ内のいくつかのファイルで出力は、Makefileの

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 

、出力はそれが非常に困難警告を見つけることができます:

enter image description here

GCCへの各呼び出しの間に改行を挿入するにはどうすればよいですか?たぶん、もう少し目立つように警告を発する?

+0

「@echo」のようにコンパイルします。 @ $(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) 

いくつか他のもの:内蔵のレシピ

  • makeのに使用されるような

    • :=LDLIBS
    • =にを好むは、ライブラリの標準変数であり、デフォルト ccから CCを行い、そのデフォルトのコンパイラへのリンクにする必要があります。通常は設定する必要はありません。 CC
    • あなたdefaultターゲット(-j)並列ビルドに失敗します、私はそれ
    • でこのメイクファイルを気にしないだろうが、単にターゲット最初のルール
    • wildcardとソースに気をつけて作る、allルールを必要としません、それだけで使い、あなたはそれぞれのオブジェクトファイルを作っている手動
    • それらを指定するすべてのヘッダに依存するのは安全です内蔵の代わりにdepedency世代(-MMD -MPinclude)は
    • メイクすでにリンクしてコンパイルしたオブジェクトのためのレシピを持って、それらを再利用
    • デフォルトにする$(RM)rm -f
  • +0

    すばやく追加: '$(COMPILE.c)'の前に '@'を置くのではなく、 '$(Q)'を使うことができます。 '$(V)'が1に設定されている場合は空白になります。この方法で、デバッグしている場合は 'make V = 1'と入力して完全なコマンドを見ることができます。 – user2766918

    関連する問題