忍者ブログ

雑記

【Makefile】C言語用覚書

雑記 > codeのメモ > 【Makefile】C言語用覚書

Windows Subsystem for Linuxを試したときに真っ先に書いたMakefile。
ヘッダファイルのみを更新した場合は、ファイル更新を識別できないので注意。
#========================================= 
# COMMON
#-----------------------------------------
TEST = sample
CC   = gcc

vpath %.h source_c/include
vpath %.c source_c source_c/common

DIR_OBJ = ./obj
DIR_OUT = ./outs

INCLUDE = -I source_c/include

SOURCES = $(wildcard source_c/common/*.c source_c/$(TEST).c) 
OBJECTS = $(addprefix $(DIR_OBJ)/,$(notdir $(SOURCES:.c=.o))) 

#=========================================
# .SUFFIXES .PHONY
#-----------------------------------------
.SUFFIXES : .o .h .c .out
.PHONY    : clean run

#=========================================
# run
#-----------------------------------------
run : $(DIR_OUT)/$(TEST).out
	./$(DIR_OUT)/$(TEST).out

#=========================================
# $CC
#-----------------------------------------
$(DIR_OUT)/$(TEST).out : $(OBJECTS)
	mkdir -p $(DIR_OUT)
	$(CC) -o $@ $^

$(DIR_OBJ)/%.o : %.c
	mkdir -p $(DIR_OBJ)
	$(CC) -o $@ -c $<

$(DIR_OBJ)/$(TEST).o : $(TEST).c
	mkdir -p $(DIR_OBJ)
	$(CC) -o $@ -c $<

#=========================================
# clean
#-----------------------------------------
clean : 
	\rm -r $(DIR_OBJ)
	\rm -r $(DIR_OUT) 
source_c/sample.cをコンパイルし実行する場合は、
make
sample.c以外でmain()のコードを書いた場合、例えばtest_00.cの場合は、
make TEST=test_00

関連記事

コメント

カレンダー

12 2018/01 02
S M T W T F S
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31