您可以使用 NMAKE 为变量分配通配符吗? [复制]

Posted

技术标签:

【中文标题】您可以使用 NMAKE 为变量分配通配符吗? [复制]【英文标题】:Can you assign a wildcard to a variable using NMAKE? [duplicate] 【发布时间】:2020-12-17 04:42:47 【问题描述】:

我来自 UNIX 背景,所以我习惯于在 GNU/Make 中做这样的事情:

SRC=$(wildcard src/*.c)
OBJ=$(SRC:.c=.o)

all: $(OBJ)
    ...

我想知道是否大致相当于在 Microsoft NMAKE 中完成。我有以下简单的 NMAKE Makefile:

all: obj\a.obj obj\b.obj obj\c.obj 

src\.cobj\.obj:
    cl /c $** /Fo$@

这很好用。它从src/ 获取所有源文件,并将它们编译为obj/ 中的等价物。但是,我想将默认目标压缩为像obj/*.obj 这样的通配符,这样我就不必手动写出所有目标文件。

这在 NMAKE 中可行吗?我已经非常彻底地检查了 NMAKE 文档,它似乎没有描述任何我想做的事情。

更新

使用this question 的公认解决方案作为参考,并使用以下 Makefile,我设法获得了我想要的效果:

.SUFFIXES: .c .obj

obj_files=$(**:.c=.obj)
all: src\*.c
    @$(MAKE) $(obj_files:src=obj)

src\.cobj\.obj:
    cl /c $< /Fo$@

这可以使用obj\ 子文件夹作为输出目录。 $** 宏在 all 目标中展开。

【问题讨论】:

【参考方案1】:

我设法将src\ 子文件夹中的所有.c 文件通配,并使用以下Makefile 将它们编译为obj\ 子文件夹中的.obj 输出:

.SUFFIXES: .c .obj

obj_files=$(**:.c=.obj)
all: src\*.c
    @$(MAKE) $(obj_files:src=obj)

src\.cobj\.obj:
    cl /c $< /Fo$@

obj_files 必须使用$** 宏(将在all 目标中扩展)定义,因为我需要进行双字符串替换以更改目录名称和文件后缀。到目前为止,我找到的所有资源都只指定了如何进行单个字符串替换。

【讨论】:

以上是关于您可以使用 NMAKE 为变量分配通配符吗? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

Nmake 从 .cpp 文件中获取所有 .o 文件的列表

为变量分配某个值时中断

如何在 NMake 中创建和使用多行字符串变量?

将 nmake 转换为 make

通过使用 nmake 文件附加系统时间来重命名 .exe 文件

您如何将变量分配给持久数据?