【问题标题】:What is the nmake equivalent of filter-out?过滤掉的 nmake 等价物是什么?
【发布时间】:2020-10-19 13:58:23
【问题描述】:

我已经获得了 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

【问题讨论】:

    标签: makefile cmake gnu-make nmake


    【解决方案1】:

    据我所知,nmake 中没有与 filter-out 等效的功能。此外,nmake 不支持 wildcard 函数,因此您必须处理它。而且,我怀疑你替换+= 行不通;在大多数版本的 POSIX 中 make FOO = $(FOO) 是非法的,因为它提供了一个无限循环的变量查找。不过,也许 nmake 的工作方式有所不同。

    nmake SO 与 POSIX make 和 GNU make 不同,您要么必须从头开始重写 makefile,要么只需获取适用于 Windows 的 GNU make 版本(或自己构建) . GNU make 非常便携并且在 Windows 上运行良好。这样工作量会少很多。

    【讨论】:

    • 哇,好,这很强调。感谢您为我节省了数小时的时间! ...不过,我现在对 nmake 有点困惑。我认为这是为了与 POSIX 和 gnu make 兼容,但现在它似乎是微软特有的东西,当他们已经有了 vcxproj 和 sln 文件时,他们为什么还要费心创建 nmake 呢? (无需回答,大声思考)。
    • 我是最后一个应该对 Windows 工具发表评论的人之一,但 nmake 早于 Visual Studio 及其 proj 和 sln 文件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-08
    • 2014-06-12
    • 1970-01-01
    • 2022-11-28
    • 2014-05-17
    • 1970-01-01
    • 2018-07-10
    相关资源
    最近更新 更多