makefile - 您可以使用 NMAKE 为变量分配通配符吗?
问题描述
我来自 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\}.c{obj\}.obj:
cl /c $** /Fo$@
这工作正常。它从 中获取所有源文件src/
,并将它们编译为obj/
. 但是,我想将默认目标压缩为通配符,obj/*.obj
这样我就不必手动写出所有目标文件。
这在 NMAKE 中可能吗?我已经非常彻底地检查了 NMAKE 文档,它似乎没有描述任何像我想要做的事情。
更新:
我设法使用该问题的公认解决方案作为参考,并使用以下 Makefile 来获得我想要的效果:
.SUFFIXES: .c .obj
obj_files=$(**:.c=.obj)
all: src\*.c
@$(MAKE) $(obj_files:src=obj)
{src\}.c{obj\}.obj:
cl /c $< /Fo$@
这使用obj\
子文件夹作为输出目录。$**
宏在目标all
内展开。
解决方案
我设法对子文件夹.c
中的所有文件进行通配符,并使用以下 Makefile将src\
它们编译到子文件夹中的.obj
输出:obj\
.SUFFIXES: .c .obj
obj_files=$(**:.c=.obj)
all: src\*.c
@$(MAKE) $(obj_files:src=obj)
{src\}.c{obj\}.obj:
cl /c $< /Fo$@
obj_files
必须用$**
宏定义(它将在all
目标中扩展),因为我需要进行双字符串替换以更改目录名称和文件后缀。到目前为止,我发现的所有资源都只指定了如何进行单个字符串替换。
推荐阅读
- omnet++ - OMNET++:如何根据概率向特定节点发送消息?
- powerbi - 在 PowerBI 中定义列随时间变化的报表
- php - 如何使 Laravel 6 授权检查 4 种不同的用户类型
- ggplot2 - ggplot中的闪避条形图 - 通过X轴定义颜色而不是填充
- minimum - 差分进化全局最小问题
- c++ - 读取二进制文件(is_open)
- jupyter-notebook - 在 Nbsphinx 的 .rst 文件中写入我的 Jupyter-notebook 文件名的位置
- r - 如何在 R 包说明的 Remotes 字段中包含包含空格的本地存储库?
- python - Xlsxwriter 模块适用于 Atom,但不适用于更复杂的程序
- ibm-cloud - 如何在 IBM Cloud 中部署节点红色应用程序?