关于makefile的问题

时间:2011-09-13 16:07:51

标签: makefile

这是一个简单的makefile。

我有两个问题。

  1. all:$(SOURCES)$(EXECUTABLE) 为什么把SOURCE放在依赖中。
  2. “cpp.o:” 为什么不写“.o:.cpp”

    CC=g++
    
    CFLAGS=-c -Wall
    
    LDFLAGS=
    
    SOURCES=main.cpp hello.cpp factorial.cpp
    
    OBJECTS=$(SOURCES:.cpp=.o)
    
    EXECUTABLE=hello
    
    
    all: $(SOURCES) $(EXECUTABLE)
    
    $(EXECUTABLE): $(OBJECTS) 
    
        $(CC) $(LDFLAGS) $(OBJECTS) -o $@
    
    .cpp.o:
    
        $(CC) $(CFLAGS) $< -o $@
    

1 个答案:

答案 0 :(得分:1)

all$(SOURCES)的依赖关系不是必需的,甚至没有用。依赖性信息应该是可执行文件依赖于目标文件,而目标文件依赖于源文件。

符号:

.cpp.o:

make的原始版本(第7版UNIX™)处理编译规则的方式。 GNU Make(和Sun Make)使用%表示法来允许:

%.o: %.cpp

基本上,这是一个当时有意义的设计决策,回想起来可能没什么意义。这不是最令人震惊的问题(可能是命令行开头的标签)。