c++ - 这个 makefile 是如何生成目标文件的?

标签 c++ c makefile

我有一个简单的问题。我做了一个像这样的简单 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 可以工作。它会自动生成目标文件吗?

最佳答案

10.2 Catalogue of Built-In Rules

Compiling C++ programs

n.o is made automatically from n.cc, n.cpp, or n.C with a recipe of the form ‘$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c’. We encourage you to use the suffix ‘.cc’ for C++ source files instead of ‘.C’.

答案是肯定的,它在同一目录中为每个源文件创建目标文件(然后将它们与您的规则链接到最终可执行文件)。

关于c++ - 这个 makefile 是如何生成目标文件的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36277505/

相关文章:

c++ - 如何正确构建静态库?

c++ - QSslSocket::startServerEncryption 失败,返回 "PEM_READ_BIO_PRIVATEKEY:bad password read"

c++ - 如何重载加号以求和不确定数量的对象

objective-c - 如何检查两个格式字符串是否兼容?

git - Makefile:比较 git tag 和 package.json 中的两个版本字符串值

c++ - 什么特殊规则适用于一元 & 运算符?

c - 写入 I2C 的缓冲区在读取时不返回

c - 当函数体没有返回语句时内联

c++ - 如何为 C++ 设置跨平台编译(win7 中的 NetBeans 和 linux 中的 make)

c++ - GNU make 一种双冒号