什么是 nmake 等同于过滤掉的?

What is the nmake equivalent of filter-out?

我已经获得了 ubuntu 的 makefile,我正尝试在 Windows 10 上将其与 nmake 一起使用。

nmake 似乎无法识别 filter-out 关键字,例如以下行:

OBJS_TEST = $(filter-out $(EXE_OBJ), $(OBJS))

nmake 是否有具有相同功能的关键字?

为了完整起见,从文件开头到上面一行(以及下面几行)的行如下:

EXE = main
TEST = test
OBJS_DIR = .objs

###############################################
### THE LINE IN QUESTION IS BELOW #############
OBJS_TEST = $(filter-out $(EXE_OBJ), $(OBJS))
###############################################

CPP_TEST = $(wildcard tests/*.cpp)

# CPP_TEST += uiuc/catch/catchmain.cpp
# The above line doesn't work with the "+=" extension in nmake; replace with below.
CPP_TEST = $(CPP_TEST) $(wildcard tests/*.cpp)

报告的错误是:

fatal error U1001: syntax error : illegal character '-' in macro

据我所知,在 nmake 中没有等同于 filter-out 的东西。此外,nmake 不支持 wildcard 函数,因此您必须处理它。而且,我怀疑您对 += 的替换不会起作用;在大多数 POSIX 版本中, make FOO = $(FOO) 是非法的,因为它给出了变量查找的无限循环。不过,也许 nmake 的工作方式不同。

nmake SO 不同于 POSIX make 和 GNU make,你要么必须从头开始重写 makefile,要么就去获取一个 GNU 版本制作 Windows(或自己制作)。 GNU make 非常便携,在 Windows 上运行良好。那会少很多工作。