ただいまコメントを受けつけておりません。
雑記 > 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
ただいまコメントを受けつけておりません。