【问题标题】:How does this makefile make objectfiles?这个 makefile 如何生成对象文件?
【发布时间】:2016-03-29 07:01:10
【问题描述】:

我有一个简单的问题。我做了一个简单的 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 有效。它会自动生成对象文件吗?

【问题讨论】:

  • make 程序具有隐式规则,因此它知道如何从源文件创建目标文件。如果您使用的是 Linux,您很可能拥有 GNU Make,请read its manual 了解更多信息。
  • make 实际上有很多隐式规则,例如,在您的示例中,$(CC) 隐式设置为您环境的cc
  • 不要将CC 变量更改为g++,您只需在链接行中使用$(CXX)

标签: c++ c makefile


【解决方案1】:

10.2 Catalogue of Built-In Rules

编译 C++ 程序

n.o 由 n.cc、n.cpp 或 n.C 自动生成,配方格式为 '$(CXX) $(CPPFLAGS) $(CXXFLAGS ) -C'。我们鼓励您对 C++ 源文件使用后缀“.cc”而不是“.C”。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-14
    • 1970-01-01
    相关资源
    最近更新 更多