【问题标题】:NMake Pattern RulesNMake 模式规则
【发布时间】:2012-09-27 09:36:02
【问题描述】:

您好,我决定尝试学习如何通过命令行和 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

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

提前致谢。

【问题讨论】:

    标签: c++ compilation makefile nmake


    【解决方案1】:

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

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

    答案是 MS nmake 根本不支持 %-pattern 规则。 The documentation of MS nmake 及其inference rules 很容易找到。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多