在哪种情况下,我应该在Makefile中保留多个目标而不是一个?

时间:2012-07-02 12:02:46

标签: c++ linux makefile terminology

targetOne : header/headerAB.h source/sourceA.cpp source/sourceB.cpp source/main.cpp
         g++ -Wall header/headerAB.h source/sourceA.cpp source/sourceB.cpp source/main.cpp

我有理由在多个目标中打破这个而不是将其保持为一个目标吗? 在什么情况下我们需要在Makefile中使用单独的目标而不是一个?

2 个答案:

答案 0 :(得分:1)

引用http://mrbook.org/tutorials/make/

  

使用依赖项。    有时使用不同的目标很有用。这是因为如果您修改项目中的单个文件,则不必重新编译所有内容,只需重新编译您修改过的内容。

因此,在部分源更新后,您将获得更快的重新编译。对于大型项目来说,这是“必须实施”,任何变化都非常小(与整个> 1M LOC项目相比)。

此外,多个目标允许您为项目的不同部分设置不同的规则。

答案 1 :(得分:1)

通常,为了灵活性和可扩展性,您应该问'在同一规则中构建多个文件的优势是什么'。很可能第一次进行构建时,如果所有内容都使用相同的规则进行编译,那么它会更快。

但是在后续步骤中,如果您只是更改一个源代码文件,您真的希望所有其他源代码文件都构建为目标文件吗?我想象不到。但如果你把这一切都完成在一条规则中,那就是将要发生的事情。如果你有很多源代码文件,这将是昂贵的。

这也意味着如果您正在构建库,您将需要将库构建为一个单独的步骤,而不是说有一个规则可以编译所有源,然后归档库。当然,在这种情况下,这意味着库归档步骤不需要知道源代码是如何编译的,甚至不需要知道它是什么语言,这样可以更容易维护。