【转】Windows_makefile_02

【原创】Windows 下的 Makefile 编写(二)宏和预处理的简单示例 - 看雪安全论坛.html

http://bbs.pediy.com/showthread.php?t=127017

 

Windows 下的 Makefile 编写(二)宏和预处理的简单示例

作者:cntrump

在Makefile中使用宏和预处理能明显提高工作的效率。



    宏的语法为:

代码:
macroname=string

   

macroname 是字母、数字和下划线 (_) 的组合,最多 1,024 个字符且区分大小写。macroname 可以包含调用的宏。如果 macroname 完全是由调用的宏组成的,则正调用的宏不能为空或未定义。

    宏的使用:

    定义了一个宏之后就可以使用了。使用的方法很简单,如下所示就是一个简单的调用过程:

代码:
$(macroname)

 
使用括号将宏名称括起来,再在前面加上 $ 符号就可以了。在实际中的使用:

代码:
objects=stdafx.obj main.obj

Test.exe:$(objects)

    .......

 
如果string的长度太长或者需要分行显示。可以使用 \ 。反斜框后紧跟着回车就表示换行:

代码:
objects=stdafx.obj \

         main.obj

Test.exe:$(objects)

    nmake还内置了用于指定文件名的宏,叫作文件名宏

文件名宏被预定义为依赖项中指定的文件名(而不是磁盘上的完整文件名指定)。在调用时不需要将这些宏括在括号内;只需按如下方式指定 $。


 意义
 
$@
 当前所指定的当前目标的全名(路径、基名称、扩展名)。
 
$$@
 当前所指定的当前目标的全名(路径、基名称、扩展名)。仅在作为依赖项中的依赖项时有效。
 
$*
 当前目标的路径和基名称,没有文件扩展名。
 
$**
 当前目标的所有依赖项。
 
$?
 时间戳比当前目标的时间戳晚的所有依赖项。
 
$<
 时间戳比当前目标的时间戳晚的依赖文件。仅在推理规则的命令中有效。
 

使用文件名宏对编写Makefile是很有帮助的,特别是在文件数量多的时候,可以节省大量时间。例如上面的例子,使用的文件名宏后:

代码:
objects=stdafx.obj \

         main.obj

Test.exe:$(objects)

    link.exe $**

 
这样只需使用 $** 就替代了Test.exe所依赖的所有.obj文件,相当方便。

生成文件预处理

预处理指令不区分大小写。初始感叹号 (!) 必须出现在行首。感叹号后面可以有零个或多个空格或制表符,用于缩进。

下面是经常会用到的预处理:

!MESSAGE text

      用来显示一段文本信息,显示的内容就是text所指定的内容。

!INCLUDE [<]filename[>]

      作用类似于C++ 中的 #include ,将filename包含进来,如果filename里的指令可执行则会先执行其中的指令然后再继续。

!IF constantexpression 

如果 constantexpression 计算结果为非零值,则处理 !IF 和下一个 !ELSE 或 !ENDIF 之间的语句。 

!IFDEF macroname 

如果定义了 macroname,则处理 !IFDEF 和下一个 !ELSE 或 !ENDIF 之间的语句。空宏将被视为尚待定义。 

!IFNDEF macroname 

如果没有定义 macroname,则处理 !IFNDEF 和下一个 !ELSE 或 !ENDIF 之间的语句。 

!ELSE[IF constantexpression | IFDEF macroname | IFNDEF macroname]

如果前面的 !IF、!IFDEF 或 !IFNDEF 语句计算结果为零值,则处理 !ELSE 和下一个 !ENDIF 之间的语句。可选关键字提供了进一步的预处理控制。 

!ELSEIF 

!ELSE IF 的同义词。 

!ELSEIFDEF 

!ELSE IFDEF 的同义词。 

!ELSEIFNDEF 

!ELSE IFNDEF 的同义词。 

!ENDIF 

标记 !IF、!IFDEF 或 !IFNDEF 块的结尾。同一行上 !ENDIF 后面的所有文本被忽略。 

!UNDEF macroname 

取消定义 macroname。

预处理数量虽然不少,但是很多都有其同义预处理。只需要记忆其中一个就可以了。

最后用一个简单的示例来说明宏和预处理的应用,附件中的例子是使用VC6生成的一个Hello World控制台程序,及其相应的Makefile编写方法。

在VC6的命令提示符下,生成Release版的命令为:

代码:
nmake clean cfg=Release

生成Debug版的命令为:

代码:
    nmake clean cfg=Debug

现在,你已经具有编写简单Makefile的能力了。

btw:
PDF文件中还有附件,里面是例子代码。*转载请注明来自看雪论坛@PEdiy.com 

 

转载于:https://www.cnblogs.com/DriverSkill/p/6183657.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值