2.make常用语法

一、make常见参数(目标)

make all 编译所有目标;
make -j8 使用8个核心编译目标
make install 安装已编译的程序;
make uninstall 卸载已编译的程序;
make clean 删除由make命令产生的文件,通常删除目标文件.o;
make check 测试刚编译的软件;
make dist 重新打包packname-version.tar.gz

二、Makefile文件及其语法规则

  • Makefile文件告诉make命令如何编译和链接程序;

    1.make如何工作

    先在当前目录下找“Makefile”或“makefile”文件,若找到就查找文件中第一个目标文件.o;
    若目标文件不存在,根据依赖关系查找.s文件;
    若.s文件不存在,根据依赖关系查找.i文件;
    若.i文件不存在,根据依赖关系查找.c文件;此时.c文件一定存在,于是生成一个.o文件,再去执行;

    2.Makefile文件

    Makefile文件由一系列规则rules构成,每条规则形式如下:
<target>:<prerequisites>  #冒号前为目标(必须的),冒号后为前置条件(可选的);
[Tab]<command>			  #由Tab键起首,后接命令(可选);  前置条件和后接命令至少存在一个;
#目标target:可以是文件名,指明make命令要构建的对象;也可以是某个操作的名称(伪目标);

eg:

clear:
	rm *.o     #一个实例,目标文clean,命令是rm *.o;执行make clean命令,实现对象文件的删除;

前置条件prerequisites:前置条件通常由一组文件名,用空格隔开;指定目标是否构建的判断标准;

eg:

result.txt:source.txt
	cp source.txt result.txt  
#当前路径下source.txt存在,make result.txt可正常执行;否则生成source.txt;

eg:

source.txt:
	echo "a source file." > source.txt 
#没有前置条件,只要该文件不存在,每次指向make source.txt命令都会生成该文件;

命令commands:表示如何更新目标文件,由一行或多行shell命令组成;每一行命令前都要有一个Tab键;上行命令与下行无关;

3.Makefile语法:

  • # 注释
  • echoing 正常情况下,make打印每条命令,称回声;再命令前加@,关闭回声,即只输出命令的执行结果,出错则停止执行;
  • % make命令允许对文件名进行类似正则运算的匹配,主要用到%;
  • $() 调用变量,将变量名放如$();
  • 赋值运算符:
    = 递归展开赋值; 可以使用后面的变量;
    := 直接赋值,不会递归展开; 使得前面的变量不呢个使用后面的变量;
    ?= 若未初始化,则赋值; 若初始化,则不会赋值;
    += 将值追加到现有内容末尾;
  • 判断语句:
    <条件语句>
    <条件为真,指向程序段>
    else
    <执行内容>
    endif
    ifeq比较两个参数值是否相等; ifneq比较两个参数值是否不等; ifdef判断变量是否有值; ifndef判断变量是否无值;
  • 循环:all目标后的命令是shell命令,引用shell变量需使用$$作为开头,
    LIST= one two three
    all:
    	for i in $(LIST);do
    		echo $$i;
    	done
    

猜你喜欢

转载自blog.csdn.net/qq_42698422/article/details/106719765