makefile雛形
ディレクトリ構成は以下のとおりとする
/home/user/workspace/hoge
├ src
│ ├ test01.c
│ ├ test02.c
│ └ test_common.h
└ Debug
├ makefile
├ conf.mk
└ src
gcov/lcov対応版
makefileは以下のような感じ
#-------------------------------------------------------------------------------
# makefile
#-------------------------------------------------------------------------------
# configuration file
-include conf.mk
# Output object files
$$(HOGE_DIR)/Debug/src/%.o: $$(HOGE_DIR)/src/%.c
@echo 'Building file: $<'
@echo 'Invoking: GCC C Compiler'
$(CC) $(INCPATH) -O0 $(DBGOP) -Wall $(CFLAGS) $(COVERAGE) -c -fmessage-length=0 -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o"$@" "$<"
@echo 'Finished building: $<'
@echo ' '
# All Target
all: hoge
# Tool invocations
hoge: $(OBJS) $(USER_OBJS)
@echo 'Building target: $@'
@echo 'Invoking: GCC C Linker'
$(CC) $(LIBPATH) -o"hoge" $(OBJS) $(USER_OBJS) $(LIBS)
@echo 'Finished building target: $@'
@echo ' '
# Other Targets
clean:
-$(RM) $(OBJS)$(C_DEPS)$(LIBRARIES) hoge $(DB_OBJS)$(DB_C_DEPS) $(TEST_OBJS)$(TEST_C_DEPS)
-$(RM) $(HOGE_DIR)/Debug/hoge.info
-$(RM) $(HOGE_DIR)/Debug/lcov_hoge_html
-$(RM) $(HOGE_DIR)/Debug/*.gcov
-$(RM) $(HOGE_DIR)/Debug/src/*.g*
-@echo ' '
coverage:
@echo 'coverage report'
$(GCOV) ./src/*.gcda -o ./src
$(LCOV) . -o hoge.info
$(RM) ./lcov_hoge_html
$(GENHTML) -o lcov_hoge_html hoge.info
@echo 'Finished making coverage report'
@echo ' '
.PHONY: all clean dependents
.SECONDARY:
conf.mkは以下のような感じ
#-------------------------------------------------------------------------------
# conf.mk
#-------------------------------------------------------------------------------
# Macro definition
RM := rm -rf
GCOV := gcov
LCOV := lcov -c -d
GENHTML := genhtml
HOGE_DIR= /home/user/workspace/hoge
# BUILD_TYPE Setting (0:release 1:debug)
ifndef BUILD_TYPE
BUILD_TYPE = 1
else
BUILD_TYPE = 0
endif
ifeq ($(BUILD_TYPE),0)
DBGOP =
LIBTYPE = release
CFLAGS += \
else
DBGOP = -g3
LIBTYPE = debug
CFLAGS += \
endif
# BUILD_TARGET Setting
ifndef BUILD_TARGET
BUILD_TARGET = 1
else
BUILD_TARGET = 0
endif
ifeq ($(BUILD_TARGET),0)
TARGET = target
CC = gcc
else
TARGET = host
CC = gcc
endif
# COVERAGE Setting
ifdef COVERAGE_ENABLE
COVERAGE_ENABLE = 1
else
COVERAGE_ENABLE = 0
endif
ifeq ($(COVERAGE_ENABLE),1)
COVERAGE = -coverage
else
COVERAGE =
endif
INCPATH = \
-I"../../include" \
LIBPATH = \
-L"../../lib/$(TARGET)/$(LIBTYPE)" \
# Add inputs and outputs to the build variables
OBJS += \
$(HOGE_DIR)/Debug/src/test01.o \
$(HOGE_DIR)/Debug/src/test02.o \
C_DEPS += \
$(HOGE_DIR)/Debug/src/test01.d \
$(HOGE_DIR)/Debug/src/test02.d \
#Link library
LIBS := \
-lutil lpthread
makefile作成時の注意点(当たり前ですね。。。)
export MACRO=・・・ :多段makeなどでその他のmakefile内にも影響を及ぼす
MACRO=・・・ :当該makefile内でのみ有効
最終更新:2010年08月06日 15:06