问题标签 [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.
shell - 为什么makefile shell的结果与在shell中的结果不同?
使用 GNU makefile 内容:
我得到以下结果:
但是,如果我输入:
我得到结果:
显然,我的 shell 语法并没有像我想的那样做,但我不清楚为什么。
谢谢。
gnu-make - 如何查看 GNU make 运行的命令?
我正在尝试调试一个复杂的 Makefile。如何让 GNU make 打印它运行的所有命令?我在页面中找不到答案man
(使用 -d 标志似乎没有打印出来)。
(这不是回答我的问题的必要信息,但如果您想知道:我在编译基于 NVIDIA CUDA 库的项目时遇到问题。我可以自己编译它,但使用他们的 Makefile 会导致令人讨厌的编译器错误. 我想使用他们提供的 Makefile 来简化打包,并包含他们已经链接的其他包。)
makefile - 在规则执行时定义 make 变量
在我的 GNUmakefile 中,我想要一个使用临时目录的规则。例如:
如所写,上述规则在解析规则时创建临时目录。这意味着,即使我不是一直使用 out.tar,也会创建许多临时目录。我想避免我的 /tmp 被未使用的临时目录弄得乱七八糟。
有没有办法使变量仅在触发规则时才被定义,而不是在定义时才被定义?
我的主要想法是将 mktemp 和 tar 转储到 shell 脚本中,但这似乎有点难看。
c - 调试生成文件
我有一个生成文件,其中包含如下语句:
运行构建后,我收到如下消息:
所以似乎发出的 foreach 命令有问题?由于我是这些makefile的新手,有人可以建议如何调试makefile吗?
makefile - 如何在make中匹配vpath后获取绝对路径?
我有一个 makefile,它根据某些属性设置 vpath 并将源文件列表生成到一个变量中。我需要在不编译任何东西的情况下运行makefile(编译实际上由不同的makefile处理),并且只需根据vpath设置查看文件名与哪些真实文件匹配。
unix - 在 Makefile 中转义文件名中的冒号
有没有办法让 GNU make 正确处理包含冒号的文件名?
我遇到的具体问题恰好涉及模式规则。这是一个不依赖于剪切和粘贴制表符的简化版本:
将 $(COLON) 替换为文字 : 会产生完全相同的结果。如果没有反斜杠,它会这样做:
makefile - 使用 gnumake 和先决条件并行构建
我的第一个问题(耶!)是关于 gnumake 和并行构建的。这是一个简单的示例文件:
如果我make -j
对这个人这样做,我在这里是否正确确保命令tool_1
只执行一次,然后再make
尝试构建任何tool_[234]
?
我正在寻找的是首先构建的make -j
原因tool_1
,然后tool_[234]
是并行构建,但不执行tool_1
三次命令。我希望这是有道理的。感谢您的任何建议或想法!
c - 通过命令行附加到 GNU make 变量
我正在使用 GNU-make Makefile 构建具有多个目标( 、 和一些项目特定目标)的 Call
项目clean
。在调试过程中,我想在不永久编辑 Makefile 的情况下将一些标志附加到单个构建(例如添加调试符号或设置预处理器标志)。
过去,我是按如下方式完成的(使用调试符号示例):
不幸的是,这不是附加到CFLAGS
变量,而是清除它并停止编译。CFLAGS
有没有一种干净的方法来做到这一点,而无需定义附加到and末尾的某种虚拟变量LDFLAGS
?
build - bmake的优点
除了 bmake 是 GNU make 的 BSD 等价物这一事实之外,我无法清楚地理解它相对于 GNU make 的优势。谁能帮我?我只能找到一个有点帮助的资源。更多帮助或指针表示赞赏。
c++ - Makefile 工作 %.c,不工作 %.cpp
我有一组用于构建“大”C 项目的生成文件。我现在正试图在我的 C++ 项目中重用一些,并且遇到了我无法弄清楚的头痛问题。
生成文件看起来像这样
它有点复杂,但它在 C 中所做的是构建 SOURCES 中定义的所有 %.c 文件并将目标文件放在 BUILD_DIR 中。它在 c 中工作得很好,但这不适用于 cpp 文件。我明白了
它就像 VPATH 根本不工作。我试过
但这也不起作用。
令人惊讶的是,将 blue.cpp 重命名为 blue.c 并将 makefile 编辑回 %.c 用法确实有效,它编译得很好。
我在这里疯了吗?