问题标签 [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.
makefile - 使用单个操作/规则生成多个目标
如何编写规则以使用单个操作生成一组文件。
示例:文件x
, y
,z
是单次执行t.sh
以文件a
为输入的脚本的结果。
GNU make 尝试执行t.sh
3 次。
qt4 - Qt4书上说“make release”,现实不同意
根据各种来源,对于 Qt4 应用程序,您使用“make release”或“make debug”构建发布或调试版本。在现实生活中,这些会产生错误。
只有赤裸裸的“制作”作品。我不确定它会产生什么。运行“strip”确实减少了可执行文件的大小,但 gdb 没有在未剥离的文件中找到符号。我在 Arch Linux 上使用 qt4.6.2。
那么确定是发布还是调试的正确方法是什么?
makefile - 如何为 GNU Make 的不同文件名编写不同的隐式规则
我有一个目录,我在其中不断添加不同的 C++ 源文件和通用 Makefile 来编译它们。这是 Makefile 的内容:
注意:从上面很明显,我将 *.out 用于可执行文件扩展名(而不是用于目标文件)。
此外,还有一些文件是一起编译的:
为了编译这样的文件,到目前为止我一直在 Makefile 中添加明确的规则:
但是现在我的 Makefile 有很多显式规则,我想用更简单的隐式规则替换它们。
知道怎么做吗?
makefile - GNU Makefile:单个规则的多个输出+防止中间文件被删除
这是从这里开始的问题的延续。问题是有一个规则会从单个输入生成多个输出,并且该命令很耗时,因此我们希望避免重新计算。现在还有一个额外的转折,我们希望防止文件作为中间文件被删除,并且规则涉及通配符以允许参数。
建议的解决方案是我们设置以下规则:
然后,调用make file-c.out
创建了两者,我们避免了与switchmake
并行运行的问题。-j
到目前为止一切都很好。
问题如下。由于上述方案在DAG中建立了一个链,make
考虑不同;这些文件被视为中间文件,默认情况下,一旦准备好,它们就会被删除,因为它们是不必要file-a.out
的。file-b.out
file-c.out
此处某处提到了一种避免这种情况的方法,包括添加file-a.out
和file-b.out
作为目标的依赖项.SECONDARY
,以防止它们被删除。不幸的是,这并不能解决我的问题,因为我的规则使用通配符模式;具体来说,我的规则看起来更像这样:
这样就可以传递包含在文件名中的参数,例如通过运行
文档建议的解决方案make
是将这些作为隐式规则添加到 的依赖项列表中.PRECIOUS
,从而防止这些文件被删除。
该解决方案.PRECIOUS
有效,但它还可以防止在规则失败且文件不完整时删除这些文件。有没有其他方法可以使这项工作?
解决这个问题的一个技巧是定义一个.SECONDARY
没有先决条件的目标,即
它通知make
所有文件都应该被视为次要文件,因此不会被删除,除非make
被中断或规则失败。不幸的是,这不允许选择带有通配符的规则子集以这种方式工作,所以我认为这只是一个 hack(尽管它很有用)。
bash - Makefile 和 rm -f 文件。{ext1,ext2,ext3} 问题
你能解释一下,为什么 Makefile 规则:
不会导致删除文件:foo.bar1 foo.bar2 和 foo.bar3?我相信我在各种 Makefile 中多次看到过这样的模式,但我目前正在编写自己的 Makefile 并且无法使该规则正常工作(没有文件被删除)。
我正在使用:
- GNU 使 3.81
- GNU 重击 4.1.5
正如我所怀疑的那样,Bash 评估了该模式:
谢谢!
更新
感谢大卫的提示,我找到了上述问题的解决方案。gnu make 默认使用 /bin/sh,这就是为什么 a.{1,2,3} 不被评估为 a.1 a.2 a.3。
要制作“make”,请使用 bash 而不是 sh 在 Makefile 中添加以下行:
从现在开始 a.{1,2,3} 将被视为 a.1 a.2 a.3
debugging - 如何捕获两个目录之间的 GNUMake 差异
我对 gmake 有一个棘手的问题,当我从父目录构建时,有些不同,并且 make 不会构建它需要的所有 .o(s) 并且失败,但是如果我 cd 到目录并执行 make 它构建他们很好。
我怎样才能让 GNUmake 告诉我这两次运行之间的区别?必须在父级中设置一些 make 变量会破坏子级,但我需要帮助弄清楚如何追踪它们。
recursion - 如何调用 shell 来创建一个新环境以在另一个 make 中运行一个 make?
我希望在我的 GNUmakefile 中有一个调用新 shell 的目标规则,然后使用新 shell 的干净石板调用新的 make。
这样做的语法是什么?
我试过了,但没有用:
它会无限重复以下错误:
makefile - 如何将当前目录捕获为 make 变量中的绝对路径名?
我想在 GNUmake 文件运行期间将当前目录放入 make 变量中。
这样做的语法是什么?像这样的东西?
makefile - 在 GNU make 中列出定义中包含变量的目标/目标
我有一个相当大的makefile,它通过从变量中计算名称来动态创建许多目标。(例如 foo$(VAR) : $(PREREQS))。有什么方法可以说服 gnu make 在扩展这些变量后吐出目标列表?
我希望能够获得任意生成文件的目标。我正在尝试为我的 shell 编写一个完成函数。
makefile - Makefile 通用模式规则——来自 xyzzy.ext0 的 xyzzy-en_US.ext2
我想不出一种方法来为以下使用 make 的生产定义通用模式规则:
xyzzy-en_US.ext2
来自xyzzy.ext0
via的要求xyzzy.ext1
。
这有效:
但是如何概括第二条规则的语言环境部分呢?还是我需要为所有不同的语言环境生成规则?
这些都不起作用: