这个makefile如何生成目标文件?

3

我有一个简单的问题。我制作了一个简单的Makefile,就像这样:

OBJ = main.o Str.o Out.o
CC = g++
TAR = main

$(TAR):$(OBJ) Header.h
    $(CC) -o $(TAR) $(OBJ)

clean:
    rm -f $(OBJ) $(TAR)

我当前目录中有Str.cppOut.cppmain.cpp文件。即使我错过了将源文件转换为目标文件的过程(例如g++ -c Str.cpp),它仍然可以正常工作。

我很好奇这个Makefile是如何工作的。它是否会自动创建目标文件?


9
make程序有隐式规则,因此它知道如何从源文件创建目标文件。如果你在Linux上,你很可能拥有GNU Make,请阅读其手册以获取更多信息。 - Some programmer dude
make 实际上有很多隐含规则,比如在你的例子中,$(CC) 隐式设置为你环境中的 cc - Leandros
1
你应该在链接行中使用$(CXX),而不是将CC变量更改为g++ - rodrigo
1个回答

3

10.2 内置规则目录

C++程序编译

n.o会自动地从n.cc,n.cpp 或n.C生成,其配方形式为‘$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c ’。我们鼓励您使用后缀“. cc”代替”.C”作为C++源文件。

答案是肯定的,它会为每个源文件在相同的目录下创建一个对象文件(然后将它们全部连接到您的规则以生成最终可执行文件)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接