通用makefile文件(windows,linux)
makefile的缺省目录结构如图所示,用户可以修改黄部分的目录名,这是用户手动建立的。注意图中黄的makefile文件不能修改。蓝部分是make按照makefile文件自动生成的。用户可以通过make命令修改最后产生的执行文件名称
一般描述:
首先手动创建根目录,此处创建的目录是d:\make-file,用户可以创建任意目录名称,根目录创建完成后,将makefile文件放于该文件夹内。
在根目录下手动创建inc和src两个文件夹,分别用于存放.h头文件和.c源文件,并将要编译的头文件和源文件放于这两个文件夹下。
缺省情况下,即运行命令make会编译链接inc和src文件夹下的源程序,将自动创建obj,dep和bin三个文件夹,其中obj文件夹下存放.o文件,dep文件夹下存放.d依赖文件,bin文件夹下存放生成的exe文件,缺省文件名为。
命令格式:
Make [I_PATH= .h file directory] [C_PATH=.c file directory] [EXE = output .exe filename]
命令描述:
[]表示可选参数;
I_PATH参数指定头文件路径,若不带I_PATH参数,make会到inc目录下查头文件;
C_PATH参数指定c文件路径,若不带C_PATH参数,make会编译src下的c文件;
EXE参数指定输出可执行文件名,若不带EXE参数,会在bin目录下生成名字为 的可执行程序。
使用举例:
make
编译链接inc下的头文件和src下的源程序,在bin文件夹下生成名字为的可执行文件。
make
编译链接inc下的头文件和src下的源程序,在bin文件夹下生成名字为的可执行文件。
make I_PATH=head
编译链接head下的头文件和src文件夹下的源程序,在bin文件夹下生成名字为 的可执行文件。
make I_PATH=.
编译链接根目录下的头文件和src下的源程序,在bin文件夹下生成名字为的可执行文件。
make C_PATH=cpp
编译链接inc下的头文件和cpp下的源程序,在bin文件夹下生成名字为的可执行文件。
make I_PATH=head C_PATH=cpp
编译链接head下的头文件和cpp下的源程序,在bin文件夹下生成名字为的可执行文件。
make I_PATH=head C_PATH=cpp
编译链接head下的头文件和cpp下的源程序,在bin文件夹下生成名字为的可执行文件。
make clean
删除dep,obj和bin下的所有文件,并删除这三个文件夹
makefile文件源码
.PHONY: all clean
##命令及参数
MKDIR = mkdir
RM = rm
RMFLAGS = -fr
CC = gcc
CCFLAGS = -Wall -O2
linux怎么读取windows文件##目录
DIR_DEPS = dep
DIR_OBJS = obj
DIR_BINS = bin
I_PATH = inc
C_PATH = src
DIRS = $(DIR_DEPS) $(DIR_OBJS) $(DIR_BINS)
EXE = ##执行文件
TARGET := $(addprefix $(DIR_BINS)/,$(EXE))
SRCS = $(wildcard $(C_PATH)/*.c) ##寻src中的.c文件
OBJS = $(patsubst %.c,%.o,$(notdir $(SRCS)))    ##objs/*.o
OBJS := $(addprefix $(DIR_OBJS)/,$(OBJS))
DEPS = $(patsubst %.c,%.d,$(notdir $(SRCS)))    ##deps/*.d
DEPS := $(addprefix $(DIR_DEPS)/,$(DEPS))
all: $(TARGET)
$(TARGET): $(OBJS) $(DIR_BINS)            ##生成目标文件
$(CC) $(CCFLAGS) $(filter %.o,$^) -o $@
$(DIR_OBJS)/%.o: $(DIR_OBJS) $(C_PATH)/%.c                ##目标模式$(CC) -c $(filter %.c,$^) -o $@ -I $(I_PATH) -I.
$(DIR_DEPS)/%.d: $(DIR_DEPS) $(C_PATH)/%.c              ##目标模式,创建依赖文件$(CC) -E -MM $(filter %.c,$^) \
-MF $@ -MT $@ \
-MT $(addprefix $(DIR_OBJS)/,$(notdir $(patsubst %.c,%.o,$(filter %.c,$^)))) \
-I $(I_PATH) -I.
$(DIRS):
$@
$(MKDIR)
clean:
$(RM) $(RMFLAGS) $(DIRS)
ifneq ($(MAKECMDGOALS),clean)                  ##防止第二次make clean时建目录-include $(DEPS)
endif

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。