makefile之查漏补缺

来源:互联网 发布:剑网三藏剑捏脸数据 编辑:程序博客网 时间:2024/04/29 13:32
1.忽略命令的出错,我们可以在Makefile的命令行前加一个减号“-”(在Tab键之后),标记为不管命令出不出错都认为是成功的。如:
     clean:

            -rm -f *.o


2.Make命令:
         Make [参数] [宏] [目标 目标 ……]
         一般从第一条规则开始维护。检查顺序:第一个依赖文件——第一个依赖文件的依赖文件……    ——>第二个依赖文件——第二个依赖文件的依赖文件……   ……    树状一条路径逐层展开,直查找到依赖文件都是源文件,然后原路返回,查找下一条路径。同一规则的依赖文件按照从左至右顺序。

参数:
         -c dir 指定make工作后的工作目录
         -e 不允许makefile中给环境宏赋值
         -f filename 或--file filename 指定一个或顺序指定多个makefile文件
         -i 忽略makefile中命令执行是产生的错误,不中止make
         -k 执行命令出错,放弃当前目标文件,转向其他目标
         -n 或--just-print按实际执行是顺序显示命令,包括@开头的,但不实际执行
         -p 显示makefile中所有宏定义和内部规则
         -r 忽略内部规则
         -s 执行,但不显示执行的命令
         -S 执行makefile命令菜单时出错即退出makefile
         -t 或--touch修改每个目标文件的创建日期,但不真正重新创建目标文件
         -V 显示make版本号
         -x 把所有宏输出到环境

Make的基本规则:
         Target  [属性] 分隔符 [依赖文件] [;命令行 ]
           {Tab 命令行}
         注:命令行间可以加入任意多个空行,但空行也要以tab开头。Cat –v-t-e Makefile会使Makefile文件中tab以^]显示,行尾以$显示。
         注:命令过长,用\来连接多行成一行。注释以#开头,如果#要用作字符符号,“#”。


分隔符:
         ::目标有多个规则。哪条规则中的依赖文件比目标新,执行哪条规则。如果多条规则的依赖文件都比目标新,多条规则都执行。由于后面的规则可能覆盖前面规则的执行结构,所以规则顺序不同,执行结构也不同。
         :^把本规则依赖文件和目标文件已有的依赖文件合起来,生成目标新的依赖文件列表。
         :-清除目标已有依赖文件,把本规则依赖文件作为目标依赖文件列表。
         :!对每个更新过的依赖文件都执行一次命令菜单。 ???
         :|内部规则专用。 ???
如:file.o :file.c
         file.o :^ filef.c 现依赖文件为file.c filef.c
         file.o :- filef.c 现依赖文件为 filef.c

命令行属性:
-          若本命令的执行错误,忽略掉,继续向下执行。(不加该标志,make会停止)
+   始终执行本命令,即使make参数使用了-n-q-t。(前提是本规则中依赖文件新与目标文件,命令行需要执行)
@  本命令行不在标准输出显示。



3.伪目标:
         Linux提供的内部伪目标:
         ·ERROR :
                   Make遇到错误,执行该目标规则。
·INCLUDE :file1 ……
         包含其他makefile文件,其他makefile文件位于·INCLUDE规则的依赖文件位置。实际上,是把包含的文件内容copy到当前位置。比如:包含一个宏定义文件,以便在当前位置展开,本makefile文件可以用这些宏。形式:
                            ·INCLUDE :filename1 filename2……  
或要包含的文件不在当前文件夹
                            ·INCLUDE :路径1 路径2 ……
                            ·INCLUDE :filename1 filename2 ……
或者
                            ·INCLUDE :路径/filename> ……
·IMPORT :宏 ……
         使用环境变量中的宏。
         ·IMPORT :·ENVERTHING 可以使用环境中所有宏了。
·EXPORT :宏 ……
         将宏及当前值输入环境变量中。
·SETDIR=路径
         改变当前工作路径。



0 0
原创粉丝点击