2012-10-06 63 views
6

嗨,我决定尝试学习如何通过命令行和makefile建立程序,而不是依靠Visual Studio为我完成。在熟悉编译成.obj文件和链接的过程之后,我转向了NMake。我已经编写了一个基本的makefile,用于将位于多个文件夹中的源文件编译为.obj文件,将.obj文件的每个文件夹链接到.lib文件,然后将.lib文件链接到.exe文件中。NMake模式规则

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'

感谢。

回答

4

这个问题在一年半的时间里被忽略了,但最近却吸引了4人。

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

对此的回答是MS nmake根本不支持%-pattern规则。 The documentation of MS nmake和它的inference rules很容易找到。

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