【问题标题】:Minimal GNU Make build system [closed]最小的 GNU Make 构建系统 [关闭]
【发布时间】:2015-01-10 01:42:37
【问题描述】:

关于如何在小型项目中避免使用自动工具并使用裸 GNU Make 的强大功能的文章很少:

  1. http://make.mad-scientist.net/papers/advanced-auto-dependency-generation/
  2. http://david.rothlis.net/large-gnu-make/

我想要尽可能依赖wildcard 和内置隐式规则的东西。

是否有现成的 GNU Make 脚本可供我使用?

我需要的功能(说明见第二个链接):

  • 提供标准目标
  • 标准环境变量
  • 对 C 和 C++ 头文件的自动依赖
  • 使用隐式规则
  • 对第三方包的依赖:pkg-config

很高兴拥有但对我来说不是必需的:

  • 细粒度的依赖关系
  • 检测环境变化
  • 清洁输出
  • 单独的构建目录

【问题讨论】:

  • 我们一直在努力开发我们的 make 模板宏,我不会在这里公开。还有一个正在进行的内部公司讨论,什么应该是正确的方法。如果不是基于意见,您的问题会要求场外资源推荐(这两者都是题外话)。
  • 这当然是基于意见,并要求场外资源推荐。有问题要迁移到的 stackexchange 站点吗?
  • 也许你会得到关于Meta SO 的建议...正如提到的在构建系统中提供一些更通用的东西的一个很好的起点是使用make templates
  • 不幸的是,我不知道任何可以抓取和使用的预制脚本。在两个单独的 $dayjob$s 中,我最终重新发明了同样的轮子,并实现了一个基于 gmake 的构建系统,它几乎实现了列表中的每个要点。从好的方面来说:虽然这有点乏味,但它仍然非常有趣。而且,哦,还有一个不在您的列表中:与版本控制集成(最后一个是 svn,如果我再做一次,我可能最终会使用 git)。
  • 说,github.com/mbcrawfo/GenericMakefile 可能已经足够好了

标签: c++ c gnu-make dependency-management build-system


【解决方案1】:

看看我的名为 prorab 的模板库:

https://github.com/cppfw/prorab/blob/master/wiki/HomePage.adoc

它具有您需要的大部分功能,此外还具有包含使用相同模板库的独立 makefile 的功能。

特点:

  • 提供标准目标:提供编译.c和.cpp文件、链接二进制、动态库或静态库的目标。还提供了目标:all、clean、install、uninstall

  • 标准环境变量:支持CC、CXX、CFLAGS、CPPFLAGS、CXXFLAGS、LDFLAGS、LDLIBS、PREFIX、DESTDIR

  • 对 C 和 C++ 头文件的自动依赖:是的。 *.d 使用 GCC 生成的信息。

  • 对第三方包的依赖:pkg-config:例如,只需将`pkg-config --libs yourPackage` 传递给 LDLIBS。

  • 细粒度依赖:是的,一切都依赖于必要的东西。

  • 检测环境变化:支持对编译/链接标志的依赖

  • 清洁输出:是的,如果需要,可以打开“完整”输出。

  • 单独的构建目录:目标文件被放置到一个单独的目录中,您可以重新定义。

如有任何问题,请随时与我联系或在 github 上提交问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-23
    • 1970-01-01
    • 1970-01-01
    • 2010-11-19
    • 2010-11-01
    • 1970-01-01
    • 2010-11-10
    • 1970-01-01
    相关资源
    最近更新 更多