【问题标题】:What are the other uses of the "make" command?“make”命令的其他用途是什么?
【发布时间】:2008-09-19 13:53:13
【问题描述】:

有一天,一位系统管理员老师告诉我,我应该学会使用“make”,因为我可以将它用于许多其他只会触发编译的事情。

我再也没有机会谈论它了。你有什么好的例子吗?

作为奖励,这个工具不是已弃用吗,还有哪些现代替代品(用于编译目的和其他用途)?

【问题讨论】:

    标签: makefile compilation


    【解决方案1】:

    除了编译之外,make 还可以用来做一个很好的事情,那就是 LaTeX。如果您正在使用 LaTeX 进行任何认真的工作,您会发现 make 非常方便,因为在使用 BibTex 或目录时需要多次重新解释 .tex 文件。

    Make 绝对不会被弃用。尽管有不同的方法可以做同样的事情(Windows 上的批处理文件,Linux 上的 shell 脚本),但恕我直言,效果最好。

    【讨论】:

    • 我会支持这个。为大型 LaTeX 项目提供一个好的 makefile 可以真正节省时间。
    【解决方案2】:

    Make 可用于执行您想要执行的任何命令。它最适合用于需要检查依赖关系的活动,但没有理由不能使用 make 检查您的电子邮件、重新启动服务器、进行备份或其他任何事情。

    Ant、NAnt 和 msbuild 被认为是现代替代品,但 plain-old-make 仍然广泛用于不使用 Java 或 .NET 的环境中。

    【讨论】:

      【解决方案3】:

      这个工具是不是已经弃用了

      什么?!不,甚至一点也不。我在 Linux 上,所以我意识到我不是一个普通人,但我几乎每天都在使用它。我敢肯定有成千上万的 Linux 开发人员确实每天都在使用它。

      【讨论】:

        【解决方案4】:

        我记得几年前在Slashdot 上看到一篇文章,描述了一种使用 make 优化 Linux 启动顺序的技术。

        编辑:

        Here's an article from IBM解释原理。

        【讨论】:

          【解决方案5】:

          Make 执行topological sort,也就是说,给定一堆东西,以及一组要求一件事在另一件事之前的要求,它找到一种方法来排序所有的东西,以便所有的要求被满足。构建事物(程序、文档、分发 tarball 等)是拓扑排序的一种常见用途,但还有其他用途。您可以为数据中心中的每台服务器创建一个包含一个条目的 Makefile,包括服务器之间的依赖关系(NFS、NIS、DNS 等),并且 make 可以告诉您在断电后打开计算机的顺序,或者在停电之前关闭它们的顺序是什么。您可以使用它来确定在单个服务器上启动服务的顺序。您可以使用它来确定早上穿衣服的顺序。任何需要找到满足表单 A 的一系列特定要求的一堆事物或任务的顺序的问题,都会在 B 之前通过 make 解决。

          【讨论】:

            【解决方案6】:

            我见过的最随意的用法是在BCCD 上使用 make 代替 bash 的 init 脚本。它实际上工作得很好,一旦你克服了 wtf 的时刻......

            将 make 想象成具有附加功能的 shell 脚本。

            【讨论】:

              【解决方案7】:

              好吧,我确信 UNIX 工具“make”仍然被大量使用,即使它在 .Net 世界中正在减弱。虽然现在可能有更多的人在使用 MSBUILD、Ant、nAnt 和其他工具,但它们本质上只是具有不同文件语法的“make”。基本概念是一样的。

              制作工具适用于任何将输入文件处理成输出文件的情况。在 MSWord 中编写报告,但将它们作为 PDF 分发? -- 使用 make 生成 PDF。

              【讨论】:

                【解决方案8】:

                通过 crontab 更改配置文件,如果需要。

                我有postfix 映射和squid 外部表的示例。

                /etc/postfix/Makefile 的示例:

                POSTMAP=/usr/sbin/postmap
                POSTFIX=/usr/sbin/postfix
                
                HASHES=transport access virtual canonical relocated annoying_senders
                BTREES=clients_welcome
                
                HASHES_DB=${HASHES:=.db}
                BTREES_DB=${BTREES:=.db}
                
                all: ${BTREES_DB} ${HASHES_DB} aliases.db
                    echo \= Done
                
                ${HASHES_DB}: %.db: %
                    echo . Rebuilding $< hash...
                    ${POSTMAP} $<
                
                ${BTREES_DB}: %.db: %
                    echo . Rebuilding $< btree...
                    ${POSTMAP} $<
                
                aliases.db: aliases
                    echo . Rebuilding aliases...
                    /usr/bin/newaliases
                

                【讨论】:

                  猜你喜欢
                  • 2017-01-14
                  • 1970-01-01
                  • 2019-12-12
                  • 1970-01-01
                  • 1970-01-01
                  • 2019-07-17
                  • 2018-01-26
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多