NMake模式规则

dee*_*396 6 c++ nmake makefile compilation

嗨我决定尝试通过命令行和makefile学习如何构建程序,而不是依赖Visual Studio为我做.在熟悉编译成.obj文件和链接的过程之后,我转到了NMake.我编写了一个基本的makefile来尝试将位于多个文件夹中的源文件编译成.obj文件,将.obj文件的每个文件夹链接到.lib文件,然后将.lib文件链接到.exe文件.

CC=cl /c /EHsc /Fo
LIB=lib /OUT:
LINKER=link /OUT:
EXEC_NAME=Test.exe
DEL=del
MAKE=nmake
OUT=.\out

all: $(OUT)\*.lib
    $(LINKER)$(EXEC_NAME) *.lib

clean:
    $(DEL) $(OUT)

rebuild:
    $(MAKE) clean
    $(MAKE) all

$(OUT)%.lib: $(OUT)\%\*.obj
    $(LIB)%.lib $(OUT)%\*.obj

%(OUT)\%\:
    $(CC)$(OUT)\%\ .\%\*.cpp
Run Code Online (Sandbox Code Playgroud)

当我尝试用nmake all它运行它告诉我:NMAKE : fatal error U1073: don't know how to make '.\out\*.lib'

提前致谢.

Mik*_*han 6

这个问题被忽略了一年半是可以理解的,但最近吸引了 4 个赞成票。

实际上没有说明问题,但隐含的问题是:为什么不能nmake遵循我的 makefile 中的 %-pattern 规则?

答案是 MSnmake根本不支持 %-pattern 规则。MSnmake及其推理规则的文档很容易找到。

GNUmake和其他一些 make 工具支持%-pattern 规则make由于明显的错误,这里的 makefile 在 GNU 中也会失败。