Make File
RichardYSteven
这个作者很懒,什么都没留下…
展开
-
自动变量 目标文件 的后缀变换
在kenerl的makefile中 有这么一句话 Makefile.build line 233 @{echo $(@: .o=.ko)}; echo $@; 这句话的意思是 将 目标文件 的后缀变换成 .ko 我做了一个实验 $cat makefile CC = gcca.out : main.c @se原创 2009-08-21 10:05:00 · 849 阅读 · 0 评论 -
Makefile debug的经验
1. 使用warning指令warning 是个不错的命令,可以打印出消息,来判断makefile执行的流程 如 , 这是一个普通的编译kernel module的Makefile,但是我忘记这个文件的执行顺序了。 # If KERNELRELEASE is defined, we've been invoked from the# kernel build syst原创 2009-10-28 10:04:00 · 11916 阅读 · 0 评论 -
gcc lds
reference:http://www.360doc.com/content/09/0623/18/36491_4007725.shtmlhttp://ftp.gnu.org/pub/old-gnu/Manuals/ld-2.9.1/html_node/ld_toc.html1. lds的基本格式1.1section定义SECTIONS { .原创 2013-06-21 23:28:08 · 1910 阅读 · 0 评论 -
makefile 中的 static pattern rules
http://www.gnu.org/software/make/manual/html_node/Static-Usage.html今天发现在qemu的makefile中有这种用法, 记录一下。 基本语法 TARGETS ...: TARGET-PATTERN: PREREQ-PATTERNS ... RECIPE转载 2012-06-12 21:10:52 · 2027 阅读 · 0 评论 -
Makefile example
==========================================#!/usr/bin/makevpath %.cpp srcvpath %.c srcvpath %.h includeCC := g++#SOURCES := socket.cpp UDPSocket.cpp address.cppSOURCES := $(notdir $(wil原创 2008-12-17 20:55:00 · 1057 阅读 · 0 评论 -
打印出 本次编译时的变量及其值
<br />有一天我突发奇想,也是实在没办法,不知道人家编译的时候干了什么。就像把人家用的某个变量打出来,而且我又不知道人家变量叫啥。悲剧!<br /> <br />我就干脆在网上找,有没有办法。 果然被我找到一个。下面这两个 <br />第一个打印出用户定义的变量。第二个是什么都打出来。 <br />其实主要是用了 .VARIABLES 变量 和 origin 函数。<br /> <br />.PHONY: printvars<br />printvars:<br /> @$(foreac原创 2010-11-23 14:29:00 · 1498 阅读 · 0 评论 -
条件指令
条件指令就相当于c中的#ifdef可以使用的指令有ifdef varendififdef varelseendififeq var1 var2endif需要注意的一点是,当条件指令用在命令脚本中时,不能在前面加tab。否则会报错。另外使用ifeq 指令时 最好使用如下格式。ifeq "a" "b"endif其中a b是变量名。原创 2010-06-10 10:08:00 · 1116 阅读 · 0 评论 -
变量与宏
变量的类型1. := 简单扩展变量2. = 递归扩展变量3. ?= 条件赋值变量 只会在变量值不存在时,才会进行赋值动作。这个用在接收命令行的变量设置4. += 附加变量宏用define endef定义的代码块。如 define rename mv a bendef变量和宏的使用$(变量名)何时扩展变量和宏make运行时,会分成两个阶段来完成工作。 是在第一个阶段就展开,还是在第二个阶段展开,就是所谓的简单变量和递归变量。第一阶段make读取规则(包括工作目标,必要条件),变量,形原创 2010-06-09 14:05:00 · 1909 阅读 · 0 评论 -
自动产生依存关系
当一个文件包含的头文件变得很多,源文件也变得很多的时候。 我们要是手动在makefile中加入依存条件,就变得复杂,而且容易出错了。 现在有个办法可以自动生成依存条件。 include ywtest.d%.d: %.c gcc -MM $(CPPFLAGS) $ $@.$$$$ ; / sed 's,/($*/)/.o[ :]*,/1.o $@ : ,g' $@; / rm -f $@.$$$$gcc -MM表示只显示包含的非系统头文件。 然后通过s原创 2010-06-07 09:53:00 · 850 阅读 · 0 评论 -
一个简单的help命令
<br />大型的makefile经常包含的许多的工作目标,下面是个简介的help目标,能够显示makefile中的工作目标。 <br /> <br />.PHONY: help<br />help:<br /> @ $(MAKE) --print-data-base --question | /<br /> awk '/^[^.%][-A-Za-z0-9_]*:/ /<br /> {print substr($$1, 1, l原创 2010-06-05 11:34:00 · 942 阅读 · 0 评论 -
make的规则
make允许的规则1. 具体规则2. 模式规则用通配符而不是明确的文件名3. 隐含规则可以是模式规则,也可以是后缀规则4. 静态模式规则像正规模式规则,值不过它们只能应用在一串特定的工作目标文件中。原创 2010-06-04 13:30:00 · 1251 阅读 · 0 评论 -
以VPATH 和 vpath来查找文件
<br />在默认情况下,make只在当前目录中寻找工作目标以及必要条件。 <br /> <br />可以用VPATH 和 vpath告诉make到不同的目录中去找工作目标和必要条件。 <br /> <br /> <br />VPATH 和 vpath还有点小区别<br /> <br />VPATH = src include<br />告诉了make到src include目录下找文件,以第一个找到的为准。<br /> <br />vpath %.l %.c src<br />vpath %.h in原创 2010-06-02 15:27:00 · 953 阅读 · 0 评论 -
自动变量
<br />下面是7个核心的自动变量<br /> <br />$@ 工作目标文件名<br />$% 档案文件成员 结构中的文件名元素。 见下面解释<br />$< 第一个必要条件的文件名<br />$? 时间戳在工作目标之后的所有必要条件<br />$^ 所有必要条件的文件名,没有重复的<br />$+ 所有必要条件的文件名, 有重复的<br />$* 工作目标的主原创 2010-06-02 15:19:00 · 1196 阅读 · 0 评论 -
空工作目标
<br />空工作目标 empty target 其实是个人为的工作目标。<br /> <br /> <br /> <br />如:<br />prog: size prog.o<br /> $(CC) $(LDFLAG) -o $@ $^<br /> <br />size: prog.o<br /> size $^<br /> touch size<br /> <br /> <br />这个size就是一个空工作目标,只有当prog.o更新后,才会执行size规则。 <br /> <br原创 2010-06-02 15:07:00 · 1025 阅读 · 0 评论 -
假象工作目标.PHONY 的三种用法
<br />假象工作目标.PHONY的定义是,任何不代表文件的工作目标。 <br /> <br />这样可以让make知道<br />1. 总是将该目标标记为尚未更新<br />2. 让make知道,不应像处理一般规则那样,从源文件来建立以工作目标为名的文件。可以优化搜索程序,提高性能。<br /> <br />常用的三种 假象工作目标的用法是:<br /> <br />1. 普通的用法。 <br />如,常用的 all , clean<br /> <br />2. 作为内置在makefile中的she原创 2010-06-02 15:01:00 · 2156 阅读 · 0 评论 -
对文件名的操作 以及取得相对路径的文件名
SRC := hello_world.c board_io.c time.c qq.cFULL := /home/wyang2/test/kmodule/hello_world.c /home/wyang2/test/boardio/board_io.c full_named_files=$(foreach file, $(SRC), $(filter %$(file),原创 2009-10-30 14:05:00 · 1779 阅读 · 0 评论 -
将target指定到别的目录
makefile--------------------------------------------------------- CC = gccOUT := wds/main : main.c set -e; echo " [CC] main.o "; $(CC) -o $(OUT)$@ main.c; -------------------原创 2009-10-16 16:12:00 · 1138 阅读 · 0 评论 -
可以被执行两次的makefile
摘自 Linux Device Driver # If KERNELRELEASE is defined, weve been invoked from the# kernel build system and can use its language.ifneq ($(KERNELRELEASE),)obj-m := hello.o# Otherwise w原创 2009-07-09 22:53:00 · 1756 阅读 · 0 评论 -
make中:=和=的区别
今天在=用法上掉进的坑原创 2017-03-12 11:23:05 · 916 阅读 · 0 评论