简单、通用的Makefile
我试图为我的大学项目创建我自己的、小但通用的Makefile。我设法写的是流畅的代码。问题是,我必须多次运行简单、通用的Makefile,makefile,Makefile,我试图为我的大学项目创建我自己的、小但通用的Makefile。我设法写的是流畅的代码。问题是,我必须多次运行makeall来编译所有可执行文件。.o文件和相应的可执行文件在每次make调用时以增量方式创建,而不是一次创建。应该怎样做才对呢 # Variables Project = Project_Name Src = src Include = inc Lib = lib Build = build Dist = dist Res = resources Li
makeall
来编译所有可执行文件。.o
文件和相应的可执行文件在每次make
调用时以增量方式创建,而不是一次创建。应该怎样做才对呢
# Variables
Project = Project_Name
Src = src
Include = inc
Lib = lib
Build = build
Dist = dist
Res = resources
LibSem = -L$(Lib) -lbib
CC = gcc $(CFLAGS)
# Vpaths for implicite rules.
vpath %.c $(Src)
vpath %.h $(Include)
vpath %.o $(Build)
vpath %.d $(Build)
# Src is set for explicite named files.
CPPFLAGS += -I$(Src) -I$(Include)
# Define Source variable with the list of .c files
# File is updated by Vim by the call of "make update"
include build/Sources.inc
all: prog1 prog2
cp -fr $(Res)/* $(Dist)
bib: libbib.o
ar -cvrs $(Lib)/libbib.a $^
prog1: prog1.o sem
$(CC) $(CFLAGS) $(CPPFLAGS) -o $(Dist)/$@ $< $(LibSem)
prog2: prog2.o sem
$(CC) $(CFLAGS) $(CPPFLAGS) -o $(Dist)/$@ $< $(LibSem)
update:
#----------------------------------------
# Updating list of sources.
#----------------------------------------
echo -n "Sources = " > $(Build)/Sources.inc
find src/ -type f -name '*.c' -printf "%f " >> $(Build)/Sources.inc
clean:
#----------------------------------------
# Cleaning files.
#----------------------------------------
rm -rf $(Build)/*
rm -rf $(Dist)/*
rm -rf $(Lib)/*
touch $(Build)/Sources.inc
dist: clean dep all
#----------------------------------------
# Distribute archive.
#----------------------------------------
tar -cvzf $(Project).tar.gz $(Include) $(Res) $(Src) Makefile
# changed for output in Build directory
%.o: %.c
$(COMPILE.c) -o $(Build)/$@ $<
# autogenerated dependencies files
-include $(subst .c,.d,$(Sources))
dep %.d: %.c
#----------------------------------------
# Generating auto-dependencies
#----------------------------------------
$(CC) -M $(CPPFLAGS) $< > $(Build)/$@.$$$$; \
sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $(Build)/$@.$$$$ > $(Build)/$@; \
rm -f $(Build)/$@.$$$$
#变量
项目=项目名称
Src=Src
包括=公司
Lib=Lib
建造
距离
Res=资源
LibSem=-L$(Lib)-lbib
CC=gcc$(CFLAGS)
#隐式规则的vpath。
vpath%.c$(Src)
vpath%.h$(包括)
vpath%.o$(生成)
vpath%.d$(生成)
#Src是为显式命名文件设置的。
CPPFLAGS+=-I$(Src)-I$(包括)
#使用.c文件列表定义源变量
#Vim通过调用“make update”更新文件
包括build/Sources.inc
全部:程序1程序2
cp-fr$(Res)/*$(地区)
围嘴:libbib.o
应收账款-cvrs$(Lib)/libbib.a$^
prog1:prog1.o扫描电镜
$(CC)$(CFLAGS)$(CPPFLAGS)-o$(地区)/$@$<$(LibSem)
prog2:prog2.o扫描电镜
$(CC)$(CFLAGS)$(CPPFLAGS)-o$(地区)/$@$<$(LibSem)
更新:
#----------------------------------------
#更新来源清单。
#----------------------------------------
echo-n“Sources=“>$(Build)/Sources.inc
查找src/-type f-name'*.c'-printf“%f”>>$(Build)/Sources.inc
清洁:
#----------------------------------------
#清理文件。
#----------------------------------------
rm-rf$(构建)/*
rm-rf$(地区)/*
rm-rf$(Lib)/*
touch$(构建)/Sources.inc
地区:清洁部
#----------------------------------------
#分发档案。
#----------------------------------------
tar-cvzf$(Project).tar.gz$(Include)$(Res)$(Src)Makefile
#已更改生成目录中的输出
%.o:%.c
$(COMPILE.c)-o$(Build)/$@$<
#自动生成的依赖项文件
-包括$(辅c、.d、$(来源))
部门%.d:%.c
#----------------------------------------
#生成自动依赖项
#----------------------------------------
$(CC)-M$(CPPFLAGS)$<>$(构建)/$@。$$$$\
sed's,\($*\)\.o[:]*,\1.o$@:,g'<$(构建)/$@.$$>$(构建)/$\
rm-f$(构建)/$@$$$$
这些规则是错误的:
prog1: prog1.o sem
$(CC) $(CFLAGS) $(CPPFLAGS) -o $(Dist)/$@ $< $(LibSem)
然而,这只是冰山一角。因此,您需要进行更多的更改,以获得所需的方式。请参见此
$(Dist)/prog1: $(Build)/prog1.o sem
$(CC) $(CFLAGS) $(CPPFLAGS) -o $@ $< $(LibSem)