问题标签 [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 投票
2 回答
2949 浏览

macos - “找不到 GNU Make。尝试设置环境变量 GNUMAKE。”

我正在尝试按照本文所述安装 Steel Bank Common Lisp 。

但是,当我执行此步骤时:

我收到此错误:

究竟如何在 Mac OS X 上安装 GNU Make 并设置环境变量 GNUMAKE?

0 投票
1 回答
552 浏览

makefile - gnu make: match-anything: 依赖于先决条件的存在

请考虑以下 Makefile:

match-anything 规则(对于可执行文件)应该使我能够在终端中键入以下内容:

make TS_CG

并让编译名为 TS_CG 的可执行文件。但是,make不使用我的全匹配目标。相反,它使用其默认编译规则。

另一方面,如果 UTILITIES 中列出的所有对象都存在,它确实使用我的全匹配目标。因此,似乎匹配取决于先决条件的存在。

显然:

当一个规则是终端时,它不适用,除非它的先决条件确实存在。

(根据 制作手册)。但我的规则不是最终的;它没有用双冒号标记!

那么为什么这似乎仍然适用?

我可能还会问是否有人有更好的解决方案来区分对象目标和可执行目标,就像我在文件中尝试做的那样。

0 投票
6 回答
40710 浏览

makefile - gnu make:如何连接两个字符串

鉴于这一行:

我想附加.o到每个文件名而不是替换.cpp.o.

我怎么做?

0 投票
3 回答
14710 浏览

makefile - 如何在 Makefile 中定义规则以仅编译已修改的 *.cpp 文件(及其依赖项),而不是所有 *.cpp 文件

假设我有文件:

库:

  • 一.cpp,一.h
  • 两个.cpp,两个.h
  • 三.cpp, 三.h

程序:

  • 程序.cpp

有没有办法创建只编译从上次编译中修改的 *.cpp 的 Makefile?

目前我有这样的事情:

我工作得很好,但是当我编译我的程序然后更改 two.cpp 或 two.h 时,我需要先运行“make clean”,因为当我第二次运行“make”时,我得到:

我想以这种方式更改我的 Makefile,它会识别我的更改并重新编译该文件及其依赖项(如果 one.cpp 使用来自 two.cpp 的已修改代码,则应重新编译这两个文件)。

因此,如果我修改 two.cpp,make 应该这样做:

但是,如果 one.cpp 使用了 two.cpp 中的修改后的代码,请执行以下操作:

0 投票
1 回答
3356 浏览

makefile - Makefile 扩展变量

我想对可能包含对其他变量的引用的变量执行扩展。我将举例说明:

如果你运行这个 makefile,它会打印:

我想知道如何扩展它,以便我得到:

我可以执行以下操作:

为了接近我想要的,但这需要我再次重新分配变量。另外,我正在eval研究整个变量中可能不是我想要的东西。我希望能够做类似的事情$(expand X)并得到结果文本。

0 投票
1 回答
23079 浏览

directory - 如何在 Makefile 中复制目录?

我有一个要从 Makefileimages/中复制到的目录。build/images/该目录可能包含多个级别的子目录。最优雅的方法是什么?我想:

  • 避免在每次make运行时复制完整的目录(即 no cp -r
  • 保证一致性(即,如果一个文件在其中更改,images/则应在 中自动更新build/images/
  • 避免为 Makefile 中的每个图像和每个子目录指定规则
  • 解决内的问题make,所以没有rsynccp -u如果可能

我正在使用 GNU make,所以允许使用 GNU 特定的东西。

0 投票
2 回答
1466 浏览

gnu-make - 需要帮助 w/ 恼人的 Makefile 错误 -- g++: g++ 和 shell 错误 -- 和 Multi-Makefile 设计建议

我有一个生成文件:

在创建并填充目录结构之后调用第二个 makefile。

第二个makefile如下:

我承认我在 Makefiles 有点像新手。我想就如何简化这些文件(没有太多“魔法”)以及如何修复这两个错误提出建议......

首先,我必须说一切正常,可以这么说。当我构建目标时,它会正确创建所有目录并生成可执行文件。当我触摸基础级源目录中的文件时,我的所有文件都会被正确复制并重新编译。所以可以说这些不是“真正的”错误,只是我想摆脱的烦人的错误文本......

第一个错误发生在我运行make molecule_test需要它做某事的构建时。无论它需要做什么都会完成,但我也得到:

..AGAIN 构建成功,正确创建可执行文件

我得到的第二个错误发生在无事可做时……发生这种情况时,我得到:

请温柔...我已经阅读了基本的 makefile 教程,包括 gnu makefile 教程,但是在创建一个带有少量本地源的小程序和一个需要嵌套目录、数据的大程序之间似乎有一个飞跃文件等。我正在努力实现这一飞跃......不幸的是,我没有过去代码的最佳实践生成文件,因为我在大学的一个小型研究小组,而不是企业氛围。

我的基本方法是使用以下内容创建一个基本目录

顶层 makefile 在 build 目录中创建一个子目录,复制所需的源文件(例如,对于特定的测试程序和所需的数据文件,以及一个 makefile 来制作所有源文件。顶层 makefile 然后调用 build-level makefile。

我愿意接受有关如何简化此过程的想法,但如果我们首先解决错误,我将不胜感激。

提前致谢!!!

PS 我在 Centos 5.4、GNU Make 3.81、gcc 版本 4.1.2 20080704 (Red Hat 4.1.2-44) 上运行 .... GNU Make 和 gcc 都是 64 位版本...

0 投票
1 回答
275 浏览

gnu-make - GNU Make 忘记了先决条件?

这有点复杂,所以我在这里上传了一个示例。

如何测试它:

  • 下载压缩包并解压
  • cd make_problem/make
  • make aclean(忘记从存档中删除存档;))
  • make alib(将重新创建您刚刚删除的简单而愚蠢的存档)
  • ./奇怪的.sh

奇怪的.sh 所做的只是触摸一个源文件,重新制作,触摸另一个源文件,重新制作几次。

这是使用 GNU Make 3.81 在我的 Linux 系统上的输出:

现在我希望每次触及源时都会重新构建档案,但这显然没有发生。

谁能解释一下?并解释如何确保它始终按预期工作?

0 投票
2 回答
29656 浏览

makefile - 如何获取makefile的调用目标?

如何获取 GNU make Makefile 的调用目标?

例如,我make使用以下命令行调用:

如何在 Makefile 中获取调用目标“a-target”并将其分配给变量?

此外,如果在命令行上指定了多个目标:

我如何获得所有这些?

0 投票
2 回答
569 浏览

c++ - 需要帮助在 Makefile 中创建多个目录

我在makefile中有以下代码块:

基本上,这是必要的,因为如果构建目录不存在,我的 makefile 不会崩溃和死亡——我希望它重新创建目录树的缺失部分。嵌套是因为我有一个构建目录,一个构建内部的测试目录(用于模块测试与完整程序),然后在该测试目录中用于测试的各个目录,每个目录都需要一个源代码、obj 和bin 目录。所以要创造很多东西!

这是我的问题。有没有办法利用makefile“魔法”来给它一些单一的变量,比如:

并让它创建我需要的所有目录,比如一个或两个衬里,而不是那个巨大的 if 语句?

提前致谢!!