使用makefile有什么好的理由吗
Are there any good reasons in using a makefile?
在C++中,我可以通过使用shell脚本来实现相同的结果,在该脚本中我可以编写所有编译指令。所以我的问题是:
使用makefile有什么好的理由吗?
你有什么例子可以证明这一点吗?
使用makefile的主要原因之一是它只会重新编译自上次构建项目以来更改的源文件。为此编写shell脚本将比编写makefile花费更多的工作。
- 键盘磨损
- 防止编译所有内容花费很长时间
- 更容易在编译调试和生产之间进行更改
关于示例-请参阅大多数用C/C++编写的GNU项目
您可能想了解一下自动工具。他们将为您制作一个Makefile,同时他们也可以帮助实现代码可移植性。然而,您必须制作一些相对简单的模板文件,自动工具将使用这些文件来构建配置文件,最终用户可以运行这些文件/配置[选项];制作它们为您的makefile提供了许多最终用户可能期望的功能。有关详细介绍,请参阅:http://www.freesoftwaremagazine.com/articles/brief_introduction_to_gnu_autotools
假设您确实编写了一个shell脚本。它会起作用,你会很开心。只要有机会,你就会继续使用它。您将向其中添加参数,以便指定选项。您还会注意到,它一直在重新编译所有内容。因此,您将尝试使其更智能,以便它只重新编译已更改的文件。实际上,你要做的就是编写自己的make系统。
只要你有充分的理由这样做,那就没关系。例如:现有的make解决方案不能很好地解决X,所以你写了一个来解决这个问题。
然而,你没有现有的make系统无法解决的问题(或者至少,听起来你没有:)。你试图解决的问题已经解决了。只需阅读并使用解决方案-制作文件:)
所以,为了回答你的问题,是的,有很多——其中大部分在你需要功能之前你不会意识到。当你这样做的时候,你会感激它已经做到了你想要的。
这与在代码中使用库的逻辑相同。
- 有什么理由不扩展 std::set 以添加下标运算符吗?
- 有什么理由用右值引用重载运算符吗?
- 有什么理由在函数中使用 const 吗?
- 有什么理由C++ 11+ std::mutex 应该声明为全局变量,而不是作为函数参数传递到 std::thread 中
- 有什么理由在没有继承的情况下声明一个虚拟方法
- 不允许功能模板的部分专业化背后的理由是什么?
- 这个错误是什么?似乎没有理由出现
- typeid 运算符忽略 cv 限定符背后的理由是什么?
- 对于类型是类模板专业化的参数,ADL背后的理由是什么
- 有什么理由更喜欢从 IDE 中运行应用程序而不是运行独立的可执行文件?
- 我得到了一个使用 SDL 的 OOP 项目。我没有使用继承。我可以给我的评估员什么理由
- 有什么理由为什么“std::exchange”不是“constexpr”
- 当编译器看到 std::vector<Typo> 和 std::vector<struct 拼写错误时发出的诊断之间的差异背后的理由是什么>
- 有什么理由在 C++17 中使用 std::map::emplace() 而不是 try_emplace() 吗?
- 有什么理由不使用 auto& 进行C++基于范围的 for 循环?
- "inline function need to be DEFINED in all tranlation units"背后的理由是什么?
- §3.3.7/1.2 有什么理由被视为错误吗?
- 有什么理由在方法的第二行中使用"return"吗?
- 延长临时工的使用寿命的理由是什么
- 执行方法调用时,有什么理由不C++中添加嵌套类/结构解析