Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
简单、通用的Makefile_Makefile - Fatal编程技术网

简单、通用的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

我试图为我的大学项目创建我自己的、小但通用的Makefile。我设法写的是流畅的代码。问题是,我必须多次运行
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)