您可以使用 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 为变量分配通配符吗? [复制]的主要内容,如果未能解决你的问题,请参考以下文章