【发布时间】:2016-08-14 07:33:22
【问题描述】:
我正在尝试为具有如下结构的大型项目设计一个构建系统:
├── deploy
├── docs
├── libs
│ ├── lib1
│ └── lib2
├── scripts
└── tools
├── prog1
└── prog2
我的问题是库和程序可能会以经常变化的顺序相互依赖。我在互联网上查找了信息,我收到的信息不一。有人说我应该只使用 makefile,而另一些人说递归 makefile 是邪恶的。
除此之外,我不知道如何使用 makefile 管理依赖项(如果 lib2 需要 lib1 来构建,如何告诉 make 先构建 lib1)。有人告诉我,使用变量VPATH 很容易实现,但我已经阅读了文档,我认为这与此无关。
所以我的问题是:
- 在这种情况下我真的应该避免使用 makefile 吗?如果有,有哪些替代方案?
- 如果我应该使用 makefile,如何自动高效地管理依赖项?
【问题讨论】:
-
是的,你应该避免使用 GNU make。工作替代品(不是最新列表):cmake、scons 和 jam。如果你知道 Perl:pcons 2.3。如果您想坚持使用 make,那么至少使用 BSD make 代替(Linux 系统上的 pmake 或 bmake)。
-
“避免使用 GNU make”并选择 pmake 或 bmake 是不好的建议。如果您继续使用 make,GNU make 是最便携、使用最广泛的版本,它有一本重要的用户手册,为它编写了许多书籍,并且最容易获得帮助。当人们说“递归 makefile 是邪恶的”时,他们不一定是在说“不要使用 make”。他们说如果您使用 make 然后考虑以非递归方式编写您的 makefile。我同意 VPATH 对此没有直接帮助。
-
如果您不想编写自己的 makefile,那么 cmake(非常跨平台)和 automake(在 Windows 上不能很好地工作)将使用更简单的输入结构为您生成 makefile。两者都有自己的复杂性和学习曲线。 cmake 不仅可以生成 makefile:它还可以生成 Eclipse 项目文件、Xcode 项目文件、Visual Studio 项目文件以及各种其他文件。
标签: build makefile dependencies gnu-make