makefile描述文件的语法

作者在 2009-10-14 16:22:24 发布以下内容
    make工具最主要也是最基本的功能就是通过描述文件来描述源程序之间的相互关系并自动维护编译工作,而描述文件需要按照某种语法进行编写,文件中需要说明如何编译各个源文件并链接生成可执行文件,并要求定义源文件之间的依赖关系,为了更方便使用,文件中同时可以用一些宏定义。
    描述文件包含内容:
    (1)注释
    (2) 宏定义
    (3)显式规则
    (4)隐含规则
    1.注释和换行
    makefile中的注释是以#号开头一直到行尾的字符,当nmake工具处理到这些字符的时候,它会完全忽略#号及其后面的全部字符。
    当一行的内容过长的时候,可以用换行符来继续,makefile的换行符是\。在使用换行符的时候要注意在“\”后面不能再加上其他字符,包括注释和空格,否则nmake检测到“\”不在一行的最后,就不会把它当成换行符解释,从而出现错误。
    2. 宏定义
    makefile中允许使用简单的宏定义指代源文件及其相关编译信息,可以把宏称为变量,在整个描述文件中,只要符合下面语法的行就是宏定义:
    变量名=变量内容
    在引用宏时只需在变量前加$符号,但是要注意的是,如果变量名的长度超过一个字符,在引用时就必须加圆括号(),下面都是有效的宏引用:
     $(LINK_FLAG)
     $(EXE)
     $A
     $(A)
其中最后两个引用是完全一致的。
    3. 显式规则
    makefile中包含有一些规则,这些规则定义了文件之间的依赖关系和产生命令,一个规则的格式是这样的:
    目标文件:依赖文件;命令 (方法1)
    或
    目标文件:依赖文件 (方法2)
    命令
    规则可以用两种方法,用方法2的时候,命令可以从第二行开始,第一行的“;”省略,但是这时命令前面必须有一个Tab字符,否则nmake无法区分这究竟是命令还是别的定义。
 
    4. 隐含规则
    隐含规则可以为某一类的文件指出建立的命令,它具体定义了如何将带一个特定扩展名的文件转换成具有另一种扩展名的文件,定义的格式是:
    .源扩展名.目标扩展名:;命令 (方法1)
    或
    .源扩展名.目标扩展名: (方法2)
    命令
    隐含规则的语法和显式规则相似,也是用“:”隔开,在“;”下面书写命令,也可以不用“;”而将命令写在第二行,同理,这时命令之前要加一个Tab字符。
    隐含规则中无法指定确定的输入文件名,因为输入文件名是泛指的有相同扩展名的一整类文 件,这时候就要用到几个特殊的内定宏来指定文件名,这些宏是$@,$*,$?和$<,它们的含义如下:
    $@ —— 全路径的目标文件。
    $* —— 除去扩展名的全路径的目标文件。
    $? —— 所有源文件名。
    $< —— 源文件名(只能用在隐含规则中)。
汇编 | 阅读 1800 次
文章评论,共0条
游客请输入验证码
浏览22606次