关于makefile的问题
这是一个简单的makefile 我有两个问题关于makefile的问题,makefile,Makefile,这是一个简单的makefile 我有两个问题 全部:$(源)$(可执行) 为什么要将源放在依赖项中 “.cpp.o:” 为什么不写“.o:.cpp” CC=g++ CFLAGS=-c-墙 LDFLAGS= SOURCES=main.cpp hello.cpp factorial.cpp 对象=$(源:.cpp=.o) 可执行文件=你好 全部:$(源)$(可执行) $(可执行文件):$(对象) $(CC)$(LDFLAGS)$(对象)-o$@ .cpp.o: $(CC)$(CFLAGS)$就不难了
CC=g++
CFLAGS=-c-墙
LDFLAGS=
SOURCES=main.cpp hello.cpp factorial.cpp
对象=$(源:.cpp=.o)
可执行文件=你好
全部:$(源)$(可执行)
$(可执行文件):$(对象)
$(CC)$(LDFLAGS)$(对象)-o$@
.cpp.o:
$(CC)$(CFLAGS)$<-o$@
all
对$(源代码)
的依赖性不是必需的,甚至不是有用的。依赖关系信息应确保可执行文件依赖于目标文件,而目标文件依赖于源文件
符号:
.cpp.o:
原版(第7版)是这样的吗™) make
版本处理了编译规则。GNU make(和Sun make)使用了%
符号来允许:
%.o: %.cpp
基本上,这在当时是一个有意义的设计决策,回顾起来可能没有那么有意义。这不是最严重的问题(即命令行开头的选项卡)。如果源代码未作为依赖项包含,则运行“全部生成”修改源文件后,将导致无法重新编译可执行文件。.cpp.o:是一种旧式后缀规则,表示可以通过运行后续命令将扩展名为.cpp的文件转换为.o版本的文件。关于GNU make老式后缀规则还有更深入的信息。制表符有什么问题,除了新手有时会忘记它们之外?几乎所有其他地方都不知道空格的内容。更重要的是,它实际上没有提供多少有用的服务,AFAICT。
makefile的解析器如果在命令行的开头允许任意空白,ode>就不难了。因此,它给用户(尤其是初学者)造成了一个障碍,这其实是不必要的。
%.o: %.cpp