在 Windows 上的 nmake 中搜索一种更好的安排依赖项和目标文件的方法

Posted

技术标签:

【中文标题】在 Windows 上的 nmake 中搜索一种更好的安排依赖项和目标文件的方法【英文标题】:Searching a better way of arranging dependencies and object files in nmake on windows 【发布时间】:2015-05-28 12:13:55 【问题描述】:

我们在 windows 上使用 nmake 来构建我们的 c 应用程序。

到目前为止,我们有以下设置:

app1_build: module1.obj module2.obj module3.obj ...
cl app1.c module1.obj module2.obj module3.obj ...

多年来,这两行代码越来越多(可能有 40 个或更多目标文件),现在很难理解。

有没有办法以另一种方式(可能是垂直)排列/构造它,以便以更优化的方式布局。

提前非常感谢

【问题讨论】:

【参考方案1】:

如果可以,您应该考虑使用 GNU make 而不是 Microsoft NMAKE。 GNU make 是事实上的标准 make 实现,可在包括 Windows 在内的许多平台上广泛使用,并具有许多简化 makefile 创作的功能。相比之下,NMAKE 就束手无策了。

如果您必须使用 NMAKE,您可以做的最好的事情是将先决条件拆分为多个依赖项规范。例如,而不是

app1_build: module1.obj module2.obj module3.obj

你可以用这个:

app1_build: module1.obj
app1_build: module2.obj
app1_build: module3.obj

这两种形式与 NMAKE 相同,因为它汇总了所有此类规范中的所有先决条件,以确定 app1_build 的先决条件的完整列表。

然后,您可以在命令中使用特殊的$** 变量,因此您无需复制先决条件列表。也就是说,而不是这个:

cl app1.c module1.obj module2.obj module3.obj ...

你可以用这个:

cl app1.c $**

NMAKE 将用正在构建的目标的所有先决条件的完整列表替换 $**

【讨论】:

以上是关于在 Windows 上的 nmake 中搜索一种更好的安排依赖项和目标文件的方法的主要内容,如果未能解决你的问题,请参考以下文章

nmake:构建 OpenSSL 时找不到命令

无法在 Windows 上运行 nmake,链接在正文中给出

CLI 上的 NMake 宏定义,其中包含一个空格

在 Windows 7 上从 emacs 运行 nmake

从在 nmake 中完成的构建中,如何从 URL (wget) 下载文件?

从命令提示符获取 Windows nmake 版本?