为啥在没有依赖项发生更改时,nmake 会执行链接目标?

Posted

技术标签:

【中文标题】为啥在没有依赖项发生更改时,nmake 会执行链接目标?【英文标题】:Why would nmake execute a link target when no dependents have changed?为什么在没有依赖项发生更改时,nmake 会执行链接目标? 【发布时间】:2019-02-25 09:44:22 【问题描述】:

我的 nmake makefile 的链接目标始终被执行 - 即使自上次运行 nmake 以来没有进行任何更改。我不知道要在这里寻找什么,可能有什么问题。 link.exe 是冗余运行的,很烦人。

这是我的 nmake makefile 的要点:

BINDIR=..\bin\x64\release

OBJS= \
    $(BINDIR)\main.obj

...cpp$(BINDIR).obj:
    cl.exe /c /Fo$(BINDIR)\ /Fd$(BINDIR)\ $<

app: $(OBJS)
    link.exe $(CFLAGS) /out:$(BINDIR)\app.exe $(OBJS)

有人知道我要找什么吗?

【问题讨论】:

【参考方案1】:

我自己回答这个问题,因为我刚刚找到了我丢失的部分。

当我将app 目标拆分为命令目标和无命令目标时,它可以正常工作:

app.exe: $(OBJS)
    link.exe $(CFLAGS) /out:$(BINDIR)\app.exe $*

app: app.exe

【讨论】:

以上是关于为啥在没有依赖项发生更改时,nmake 会执行链接目标?的主要内容,如果未能解决你的问题,请参考以下文章

依赖项更改时重建 CMake 目标

当所有依赖项都发生变化时使用效果?

当我使用的库使用的库发生更改时,我的可执行文件是不是需要重新链接?

NMake 可选依赖项

在 Windows 上的 nmake 中搜索一种更好的安排依赖项和目标文件的方法

依赖项更改时 Visual Studio 运行自定义构建工具