问题标签 [gnu-make]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
6 回答
4489 浏览

makefile - 学习 GNUMake 的资源?

我正在尝试为我正在从事的一个小项目学习 GNUMake。到目前为止,即使是“基本”教程看起来也很粗糙,我还没有理解 makefile 的语法。

有没有人有一些好的资源让绝对初学者熟悉 GNUMake?

0 投票
3 回答
7002 浏览

dependencies - 需要一个可以处理丢失文件的makefile依赖规则

我们为我们的系统使用 GNU Make。在我们的 makefile 的末尾,我们有一个名为 Makedepends 的包含,它使用 gcc 上的 -MM 开关生成一堆 .d 文件。然后,我们使用 include $(CXXFILES:.cc=.d) 行为每个 .cc 文件包含 .d 文件。但是当我们删除文件或移动文件时,依赖步骤会中断,我们必须手动删除 .d 文件(即使 make clean 也不起作用,因为依赖项失败)

有没有办法生成这些依赖 .d 文件或包含这些依赖 .d 文件,从而优雅地处理文件删除或重定位?

编辑:例如:我有serial.cc,makefiles生成一个serial.d文件,它依赖于buffer.h,但后来我改变了它,所以我不再需要buffer.h,我删除了buffer.h。下次我运行 make 时,它​​会阻塞,因为它包含仍然使 serial.o 依赖于 buffer.h 的 .d 文件。

0 投票
3 回答
24657 浏览

file - 如何检查makefile中是否存在文件

我有一个生成文件模板来编译单个 DLL(用于插件系统)。用户的 makefile 如下所示:

makefile.in我有:

plugin.os要编译的主要 C++ 文件在哪里。顺便说一句,文件结尾是.os为共享库编译的目标文件(即使用-fpic选项 with gcc

现在,问题是额外的源可能(但不一定)是头文件。理想情况下,我想将它们添加为目标plugin.os和 的依赖项file.cpp,但前提是它们存在。

该方法应该适用于 windows 和 linux,或者至少适用于每个。但是,我只使用 GNU 版本的 make。

0 投票
4 回答
229 浏览

makefile - (M|m)akefile 语义是什么?

使用 makefile 和 Makefile 有区别吗?

0 投票
7 回答
3009 浏览

bash - Makefile 有什么有趣的用途可以分享吗?

“make”不仅对构建您的编程项目有用,而且在其他领域似乎没有得到充分利用。

例如,可以将许多 shell 脚本重写为 Makefile 以允许独立部分并行运行(使用“make -jXX”)以保持所有 CPU 内核繁忙,并显式声明依赖项作为额外的好处,以防万一考虑在你的 shell 脚本中重新排序一些有副作用的任务。

你有什么不寻常的使用 make / Makefiles 的有趣故事要分享吗?您是否使用其他一些实用程序作为廉价的作业调度程序?

0 投票
6 回答
245387 浏览

makefile - GNU Makefile 变量赋值 =、?=、:= 和 += 有什么区别?

任何人都可以清楚地解释变量赋值在 Makefile 中是如何工作的。

和有什么区别:

我已经阅读了GNU Make 手册中的部分,但对我来说仍然没有意义。

0 投票
4 回答
66165 浏览

makefile - GNU Make 中 CPPFLAGS 和 CXXFLAGS 的区别

GNU Make 中的 CPPFLAGS 和 CXXFLAGS 有什么区别?

0 投票
2 回答
34861 浏览

bash - Makefile 中的函数

我正在编写一个包含很多重复内容的 Makefile,例如

在定义目标“syst”的地方,定义了变量“UNAME”(通常是 Linux,但也可能是 Cygwin 或 OSF1),还定义了变量“difort”和“err_arch”。这段代码被多次用于不同的编译器目标(使用命名约定 '')。由于这是大量的冗余代码,我希望能够以更简单的方式编写它。例如,我想做这样的事情:

其中 compile 可以是根据参数执行上述代码的函数。有谁知道我怎么能做到这一点?

0 投票
2 回答
2960 浏览

bash - 使用 Makefile 中的通用目标进行 make 的 Bash 完成

我有一个 Makefile,我的大部分目标都是通过固定序列创建的。似乎 bash 完成只建议正常目标的完成,例如

而不是通用目标。有没有办法让 bash 完成所有目标,即使它们没有像上面的例子那样明确?更具体地说,假设我定义了一个目标名称列表,并执行以下操作:

有什么方法可以使这些目标可用于 bash 完成?或者,甚至更高级,假设我有两个列表,并且我希望目标由两个列表中元素的所有可能组合组成。我也可以将这些目标用于 bash 完成吗?

0 投票
2 回答
3672 浏览

makefile - 如何为单独的调试和发布构建目录创建目标?

我正在寻找建议以在递归makefile系统中正确处理单独的调试和发布构建子目录,该系统使用gnumake手册中记录的$(SUBDIRS)目标将make目标应用于(源代码)子目录。

具体来说,我对实现“all”、“clean”、“realclean”等目标的可能策略感兴趣,这些目标要么假设其中一棵树,要么应该在两棵树上工作,这会导致问题。

我们当前的 makefile 使用一个 COMPILETYPE 变量,该变量设置为 Debug(默认)或 Release('release' 目标),它可以正确地进行构建,但清理并使所有内容仅在默认的 Debug 树上工作。传递 COMPILETYPE 变量会变得笨拙,因为是否以及如何这样做取决于实际目标的值。