您好我决定尝试通过命令行和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'
提前致谢。
答案 0 :(得分:4)
这个问题可以理解地被忽视了一年半,但最近吸引了4个赞成。
实际上没有提出任何问题,但隐含的问题是:为什么nmake
不能遵循我的makefile中的%-pattern规则?
答案是MS nmake
根本不支持%-pattern规则。 <{3}}及其The documentation of MS nmake
很容易找到。
inference rules和其他一些制作工具支持GNU make
。由于明显的错误,这里的makefile在GNU make
中也会失败。