我是靠谱客的博主 激昂小懒猪,最近开发中收集的这篇文章主要介绍Makefile递归编译,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

akefile
=和:=
x := foo
y := $(x) bar
x := later
其等价于:
y := foo bar
x := later


目标:$@ 表示规则中的目标文件集。如果有多个目标,那么,"$@"就是匹配于目标中模式定义的集合。
依赖:$^ 所有的依赖集合。以空格分隔。如果在依赖目标中有多个重复的,那个这个变量会去除重复的依赖目标,只保留一份。
依赖:$< 依赖第一个名字。如果依赖目标是以模式(即"%")定义的,那么"$<"将是符合模式的一系列的文件集。注意,其是一个一个取出来的。

变量:在Makefile中的定义的变量,就像是C/C++语言中的宏一样
objects = program.o foo.o utils.o
program : $(objects)
cc -o program $(objects)

Makefile shell注意点
http://www.blogjava.net/jasmine214--love/archive/2012/01/10/368191.html
1:尽在Makefile文件的目标项冒号后的另起一行的代码才是shell代码。
2:Makefile中的shell,每一行是一个进程,不同行之间变量值不能传递。所以,Makefile中的shell不管多长也要写在一行。
3:Makefile中的变量以$开头, 所以,为了避免和shell的变量冲突,shell的变量以$$开头


SOURCES = $(foreach d,$(SRCDIRS),$(wildcard $(addprefix $(d)/*,$(SRCEXTS))))
OBJS= $(patsubst %.cpp,./obj/%.o,$(notdir $(SOURCES)))
GCNOS= $(patsubst %.cpp,./obj/%.gcno,$(notdir $(SOURCES)))


Makefile文件范例
注意使用tab键作为命令的开始,行尾不需要空格,尤其是wins->linux会出现问题

#BASE_DIR :=$(shell pwd)

SUBDIRS= fnd_system fnd_pzasset

#@取消命令本身的输出
#$1 shell第一个参数
define make_subdir
 @for subdir in $(SUBDIRS); do 
 pwd && echo $$subdir && echo $1 && echo $@ || exit $$?;  
 done;
endef

#.PHONY 说明 all等等为伪命令
.PHONY : all install clean
all :
    @echo $(BASE_DIR)
    $(call make_subdir, all)

install : 
    $(call make_subdir, install)

debug :
    $(call make_subdir, debug)

clean :
    $(call make_subdir, clean)

最后

以上就是激昂小懒猪为你收集整理的Makefile递归编译的全部内容,希望文章能够帮你解决Makefile递归编译所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(41)

评论列表共有 0 条评论

立即
投稿
返回
顶部