makefile语法

makefile及基础语法

有些话、适合烂在心里 提交于 2019-12-26 00:47:01
makefile命令和语法 (1)定义变量:变量值的本质是一个字符串,可以是文件名列表,参数烈,目录列表等。通常对于参数列表变量,写成大写方式;对于内部一般变量写成小写形式。 同时有两种定义变量方式,一种obj:=表示直接展开式变量,该变量是在变量定义时就求值,另一种obj=, obj+=, obj?=都表示递归展开式变量,这种变量是在变量被引用时才求值。 obj=代表递归赋值,obj+=代表递归追加赋值,obj?=代表条件赋值(只有该变量在之前没有被赋值的情况下才会对他赋值) obj = main.o simple.o #创建变量 foo1 := ${aaa} #直接展开式变量,此时aaa还没定义,所以foo1值为空 foo2 = ${aaa} #递归展开式变量,在执行时才会求值,所以foo2值为hello aaa = 16 foo3 = 4 foo3 += aaa # foo3追加 foo4 ?= foo3 # foo4之前没有赋值过,所以foo4可以等于foo3 (2)几种特殊变量:这里重点是3种单字符变量 $@ # 代表当前规则中的目标target文件名 $< # 代表当前规则中的第一个依赖文件名 #^ # 代表当前规则中的所有依赖文件名 在显示这几种特殊变量时,也需要额外特殊的方式 all: first second third echo “\$$@ = $@” # 这里

Android.mk文件语法规范

泄露秘密 提交于 2019-12-06 06:42:03
序言: ————- 此文档旨在描述Android.mk文件的语法,Android.mk文件为Android NDK(原生开发)描述了你C/C++源文件。 为了明白下面的内容,你必须已经阅读了docs/OVERVIEW.TXT的内容,它解释了Android.mk文件扮演的角色 和用途。 概述: ——— 写一个Android.mk文件是为了向生成系统描述你的源代码。更明确的说: - 这个文件实际上是GNU Make文件的一小片段,它会被生成系统解析一次或多次。 因此,你应该在Android.mk里尽量少地声明变量,而不要误以为在解析的过程中 没有任何东西被定义。 - 该文件的语法的明的人为了让你能将你的源代码组织为组件(module).一个组件指的是下面的一项: - 一个静态库(static library) - 一个共享库(shared library) 只有一个动态库会被安装/拷贝至你的application package中。但是静态库可用来 生成动态库。 你可以在每个Android.mk文件定义一个或多个组件,并且我可以在几个组件中使用 相同的源文件。 - 生成系统为你处理了一些琐碎之事。比如,在你的Android.mk里,你不须要列出头文件或 列出生成的文件之间的明确认依赖关系。NDK生成系统会为你自动生成。 这也意味着,当更新至新的NDK版本时,你能得到新的工具链/平台支持

Makefile 基础语法

微笑、不失礼 提交于 2019-12-02 22:13:55
1.. specify the directores , i not specified , search current directory put every folder into a list SRCDIRS := ifeq ($(SRCDIRS),) SRCDIRS := $(shell find $(SRCDIRS) -type d) 2.. $(foreach <var>,<list>,<text>) 這個函數的意思是,把參數<list>中的單詞逐一取出放到參數<var>所指定的變量中,然後再執行<text>所包含的表達式。每一次<text>會返回一個字符串,循環過程中,<text>的所返回的每個字符串會以空格分隔,最後當整個循環結束時,<text>所返回的每個字符串所組成的整個字符串(以空格分隔)將會是foreach函數的返回值。 example: SRCEXTS = .c .C .cc .cpp .CPP .c++ .cxx .cp SOURCES = $(foreach d,$(SRCDIRS),$(wildcard $(addprefix $(d)/*,$(SRCEXTS)))) 来源: https://www.cnblogs.com/hkingsp/p/11764364.html

Makefile编程

。_饼干妹妹 提交于 2019-11-26 14:58:25
【个人体会】0.1 项目文件要合理分隔,功能模块分开放,分别设置Makefile自动编译, 0.2 源码和头文件分开放,一个或多个头文件对应一个源码文件。 0.3 头文件中不要定义变量。 1. 默认变量与注释 # 表示注释 @ 取消回显 $^ 表示所有依赖文件 $@ 表示目标 $< 表示第一个依赖文件 2. 伪目标(伪目标重建时,并不影响其他的,所以很方便的添加和描述非预设的动作) .PHONY:clean 声明clean为伪目标(作用?) clean: rm -f hello main.o 【注】作用:因为没有依赖文件,所以目标文件一定是最新的,所以即使用户明确命令 make clean 重新产生它,也不会有任何事情发生。解决方法是标明所有的伪目标(用 .PHONY),这就告诉 make 不用检查它们是否存在于磁碟上,也不用查找任何隐含规则,直接假设指定的目标需要被更新。 3. 基本语法 3.1 基本格式 targets:prerequistes 【tab】command eg: main.o:main.c gcc -c main.c 3.2 =和:=区别 eg: A = foo B = $(A) # 现在 B 是 $(A) ,而 $(A) 是 'foo' 。 A = bar # 现在 B 仍然是 $(A) ,但它的值已随着变成 'bar' 了。 B := $(A) # 现在 B