PP = cpp#预处理程序
CC = gcc#编译程序
AS = as#汇编程序
CXX_FLAGS += -g -Wall -Wextra
ASM_FLAGS = -S
COV_FLAGS=-fprofile-arcs -ftest-coverage#如果不加入覆盖率测试选项,只需将其值置为空即可
LINK_GCOV=-lgcov#此处链接gcov静态库,如不需要,将其值置为空即可
TARGET_FILE =test#test即是TARGET_FILE全局变量的值,如要用到别的程序,只需修改此值即可使用
SRC_FILE = $(TARGET_FILE).c
CPP_FILE = $(TARGET_FILE).i
ASM_FILE = $(TARGET_FILE).s
OBJ_FILE = $(TARGET_FILE).o
EXE_FILE = $(TARGET_FILE)
TARGET = $(CPP_FILE) $(ASM_FILE) $(OBJ_FILE) $(EXE_FILE)
CLEANUP = rm -f $(TARGET)
all : $(TARGET)
clean :
$(CLEANUP)
#如果是其他的平台或GCC,此3路径或许需要修改才能使用
COLLECT2_DIR=/usr/libexec/gcc/i386-RedHat-linux/4.1.2
CRTLIB_DIR=/usr/lib/gcc/i386-redhat-linux/4.1.2
LIB_DIR=/usr/lib
COLLECT2=$(COLLECT2_DIR)/collect2
LDSO=/lib/ld-linux.so.2
CRT1=$(LIB_DIR)/crt1.o
CRTI=$(LIB_DIR)/crti.o
CRTBEGIN=$(CRTLIB_DIR)/crtbegin.o
CRTEND=$(CRTLIB_DIR)/crtend.o
CRTN=$(LIB_DIR)/crtn.o
LINK_FLAGS=--eh-frame-hdr --build-id -m elf_i386 --hash-style=gnu -dynamic-linker
LINK_LIBS=-lgcc --as-needed -lgcc_s --no-as-needed -lc -lgcc --as-needed -lgcc_s --no-as-needed
SEARCH_DIR=-L$(CRTLIB_DIR) -L$(CRTLIB_DIR) -L$(LIB_DIR)
$(TARGET):
$(CPP_FILE): $(SRC_FILE)
$(PP) $^ -o $@
$(ASM_FILE): $(CPP_FILE)
$(CC) $(ASM_FLAGS)$(COV_FLAGS)$^ -o $@
$(OBJ_FILE): $(ASM_FILE)
$(AS) $^ -o $@
$(EXE_FILE): $(OBJ_FILE)
$(COLLECT2) $(LINK_FLAGS) $(LDSO)$(OBJ_FILE)$(CRT1) $(CRTI) $(CRTBEGIN) $(SEARCH_DIR)$(LINK_GCOV)$(LINK_LIBS) $(CRTEND) $(CRTN) -o $@