问题标签 [makefile]

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 投票
2 回答
595 浏览

dependencies - 如何使用一个 Makefile 有效地构建组件的不同版本

我希望我没有把自己画到角落里。我已经通过实现 Makefile 获得了似乎大部分的方法,但我无法让最后一点工作。我希望这里有人可以提出一种技术来做我想做的事情。

我在源存储库的版本控制文件中有我称之为“材料清单”的东西,我构建了类似的东西:

我希望我的 Makefile 使用 $(VER) 作为标签来从存储库中检索 BOM,生成要包含在 Makefile 中的依赖文件,重新扫描包含该依赖项,然后构建产品。

更一般地说,我的 Makefile 可能有几个目标——A、B、C 等——我可以构建每个目标的不同版本,所以我可以这样做:

依赖文件包含所有三个目标的信息。

但是,创建依赖文件有点昂贵,所以如果我这样做:

我真的很希望 Makefile 不重新生成依赖项。为了使事情尽可能复杂,我可能会这样做:

所以我需要重新生成对第二个构建的依赖。

签出弄乱了用于重新生成依赖项的时间戳,所以我认为我需要一种方法让依赖项文件不依赖于 BOM,而是依赖于 BOM 更改的某些指示。

我所做的是让 BOM 签出发生在 .PHONY 目标中(因此它总是被签出)并跟踪“.sig”文件中最后一次签出的内容(如果签名文件丢失或内容与新文件的签名不同,然后 BOM 更改),并且依赖项生成取决于签名)。在我的 Makefile 顶部,我有一些设置:

看来我总是需要做:

但是,如上所述,如果我这样做,然后继续:

然后每次我调用 make 时都会更新依赖项。所以我尝试:

但是当签名改变时,依赖生成不会被触发。我认为这是因为 $(SIGS) 不是目标,所以 make 不会注意到 $(BOMS) 规则何时更新签名。

我尝试创建一个 .sig:.bom 规则并通过触摸管理签出 BOM 的时间戳,但这不起作用。

有人提出了类似的建议:

但是当 SIG 是从 BOM 创建时,BOM 如何依赖于 SIG?正如我读到的那样,“从 BOM 创建 SIG,如果 SIG 比 BOM 更新,则检查 BOM”。我如何引导该过程?第一个 BOM 来自哪里?

0 投票
5 回答
94612 浏览

makefile - 生成文件 CFLAGS

在学习TinyOS的过程中,我发现我对 makefile 完全一无所知。

有许多可选的编译时特性可以通过声明预处理器变量来使用。

要使用它们,您必须执行以下操作:

CFLAGS="-DPACKET_LINK" 这启用了某个功能。

CFLAGS="-DPACKET_LINK" "-DLOW_POWER"启用两个功能。

有人可以为我剖析这些线条并告诉我发生了什么吗?不是在 TinyOS 方面,而是在 makefile 方面!

0 投票
1 回答
185 浏览

linux - 为什么 Imake 将 Imakefile 中的某些单词解释为数值?

我发现很难找到任何现有的文档。我试图找出的是为什么 Imake 会在生成的 Make-file 中将诸如unix,linux或数字 1 之类的词解释为?i386我敢肯定它是指示您是否在该系统上的功能。我一直没能找到这是某个地方的#define 集,所以这是内置的吗?

0 投票
4 回答
424 浏览

c++ - 如何在 Nant 中使用我自己的编译器?

Nant 似乎非常以编译器为中心——猜测是因为它被认为是一个 .NET 开发系统。但我知道这是可以做到的!我已经看到了它。我们正在构建的平台有自己的编译器,并且不使用 c++ 的“cl.exe”。我们正在不同平台上构建 C++ 应用程序,并希望使用我们自己的编译器进行覆盖。谁能指出我这样做的方法,或者至少如何设置我自己的目标来使用我们目标平台的编译器?

0 投票
4 回答
5588 浏览

windows - 如果发生错误,在 Windows 控制台中暂停 GNU Make

我负责的应用程序安装的一部分,编译了一些 C 代码库。这是在使用 GNU Make 的控制台中完成的。

因此,作为安装的一部分,会弹出一个控制台窗口,您会在编译和链接时看到 make 文件输出向导,完成后控制台窗口关闭,安装程序继续。

一切都好,除非出现编译错误。然后在您有机会弄清楚发生了什么之前,make 文件会出错并且控制台窗口会关闭。

所以,我想要做的是让控制台窗口暂停,并使用“按键继续”类型的功能,如果 makefile 出现错误,以便控制台保持打开状态。否则,只需正常退出并关闭控制台。

我不知道如何在 GNU Makefile 或可以运行 Make 的批处理文件中执行此操作。

0 投票
8 回答
65942 浏览

makefile - crti.o 文件丢失

我正在使用 GNU 工具链构建一个项目,一切正常,直到我开始链接它,链接器抱怨它丢失/找不到crti.o. 这不是我的目标文件之一,它似乎与 libc 有关,但我不明白为什么它需要这个crti.o,它不会使用库文件,例如libc.a

我正在为 arm 平台进行交叉编译。我在工具链中有文件,但是如何让链接器包含它?

crti.o位于“库”搜索路径之一,但它应该.o在库路径上查找文件吗?

gcc和的搜索路径是否相同ld

0 投票
4 回答
18595 浏览

objective-c - 如何从 Xcode 项目生成 Makefile?

我想从 Mac 上现有的 Xcode 项目生成 Makefile。具体来说,Mac 上现有的 iPhone、Objective-C 程序。

我找到了 PBToMake,但它看起来适用于 Xcode 2.1,当我尝试使用它时,它不适用于 Xcode 3.1 项目。

0 投票
7 回答
27471 浏览

c++ - 为不同的输出目录生成 GCC 依赖项

我正在使用 GCC 生成依赖文件,但我的构建规则将输出放入子目录中。有没有办法告诉 GCC 将我的子目录前缀放在它为我生成的依赖文件中?

0 投票
12 回答
120533 浏览

makefile - 使用 mkdir 时如何防止生成文件中出现“目录已存在错误”

我需要在我的 makefile 中生成一个目录,并且我不想一遍又一遍地得到“目录已经存在错误”,即使我可以很容易地忽略它。

我主要使用 mingw/msys,但也希望能在其他 shell/系统上工作。

我试过这个,但它没有用,有什么想法吗?

0 投票
6 回答
7842 浏览

windows - 在 cygwin/msys bash 下使用 `pkg-config` 作为命令行参数

我正在尝试使用 cygwin 作为 Windows 下的构建环境。我对 3rd 方包有一些依赖关系,例如 GTK+。

通常,当我在 Linux 下构建时,在我的 Makefile 中,我可以添加对 pkg-config 的调用作为 gcc 的参数,所以结果如下:

这在 Linux 下运行良好,但在 cygwin 中我得到:

现在,我只是手动运行 pkg-config 并将输出粘贴到 Makefile 中,这真的很糟糕。有没有解决或解决此问题的好方法?

Make不是罪魁祸首。我可以复制并粘贴 make 用来调用 gcc 的命令行,它本身将运行 gcc,它会因“:无效参数”而停止。

我写了一个小测试程序来打印命令行参数:

注意单引号。

运行测试程序:

注意最后一行的单引号。看起来 argc 比它应该的大一,并且 argv[argc - 1] 为空。在 Linux 上运行相同的测试没有这个结果。

也就是说,是否有某种方式可以让 Makefile 将 pkg-config 的结果存储到一个变量中,然后使用该变量,而不是使用反引号运算符?