C ++ Makefile依赖关系:目标文件依赖哪些文件?

问题描述 投票:0回答:1

我对.cpp文件的Makefile依赖项有些困惑。例如,假设我有一个文件main.cpp,其中包含Point.h和Rectangle.h。我认为main.o的Makefile依赖项行看起来像:

main.o:main.cpp

但是似乎大多数人会这样做:

main.o:main.cpp Point.h Rectangle.h

我不明白为什么。在链接之前创建对象文件,对吗?因此,当将main.cpp编译为main.o时,在某种程度上,它对Point和Rectangle函数的引用仍然是未解析的引用。然后,当使最终可执行文件时,链接程序将使用Point和Rectangle的机器代码解析引用。换句话说,如果我更改Point.h或Rectangle.h,main.o并不会真正受到影响。最终的可执行文件确实依赖于这三个文件,但main.o则不。我的想法出了什么问题?

c++ makefile dependencies
1个回答
0
投票

假设您的Point.h头文件按如下所示定义了一个类:

class Point {

    int x;

    int y;

    int hash() const
    {
          return x+y;
    }
};

该类中可能包含其他内容,或某些其他类方法。这只是一个例子。

您的main.cpp调用某些hash()Point方法。然后编译。

现在返回,然后编辑此头文件:

    int hash() const
    {
          return x*y;
    }

您在main.cpp中没有任何更改。

但是您显然必须重新编译它,因为它现在应该做不同的事情,因为它调用了hash()

[任何头文件中的大部分更改可能会影响包含该文件的任何.cpp文件,因此都必须重新编译它们。

#include在逻辑上等同于用#include将行替换为包含文件的全部内容。

因此,如果更改头文件中的任何内容,从逻辑上讲等效于更改包含它的.cpp文件中的任何内容。

© www.soinside.com 2019 - 2024. All rights reserved.