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

variables - 有条件地附加到 Makefile 目标内的变量

我有一个看起来有点像这样的 GNU Makefile:

这个想法是我要么运行 make targetA 要么运行 targetB。他们俩都做非常相似的事情,但项目列表不同。问题是变量不是有条件地附加到,它总是附加到,这意味着我的输出总是“item1 itemA itemB”。

如何有条件地附加到变量?

0 投票
1 回答
1860 浏览

gcc - 如果编译一个依赖项失败,如何强制退出?

我已经发布了我的 makefile 的相关位。当我make all在这个makefile上运行时,编译时出现编译错误debugosd.o。但是,因为 make 找到了一个以前构建的debugosd.o,它只是继续构建dialup.otz

在不删除所有 .o 的情况下,我如何强制debugosd.o使其过时 - 因此make一旦遇到编译错误就强制停止debugosd.o

构建 .o 文件的规则是:

makefile 片段是:

实际上,我发现了问题所在。shared1.flw我正在强制使用虚假目标进行重建。我认为make无论错误如何,这都会迫使它继续进行。

0 投票
4 回答
15184 浏览

makefile - 是否可以在 Makefile 中“取消设置”环境变量?

我正在使用 GNU make,并在一个项目中包含一个 3rd 方库,该项目具有一个构建系统,如果CFLAGS在调用它时在环境中定义它,它就会发疯。CFLAGS出于其他原因,我喜欢在我的环境中进行定义。库的构建是从另一个 makefile 调用的,所以我说例如:

第三方: $(MAKE) -f Makefile.3rdparty

但是我想确保CFLAGS在第 3 方 Makefile 上调用 make 时未设置。我能找到的最接近的事情是:

CFLAGS:=

但这仍然CFLAGS在环境中设置,它只是一个空字符串。除了做一些可怕的事情,比如说:

第三方: bash -c "unset CFLAGS; $(MAKE) -f Makefile.3rdparty"

有没有一种简单的方法可以CFLAGS从我的主生成文件中“取消设置”变量,以便在调用第三方库时它根本不存在于环境中?

0 投票
3 回答
21792 浏览

makefile - 如何让 GNU make 明确地测试失败?

在多年不使用 make 之后,我发现自己再次需要它,现在是 gnu 版本。我很确定我应该能够做我想做的事,但还没有弄清楚如何做,或者在谷歌等处找到答案。

我正在尝试创建一个测试目标,它将多次执行我的程序,并将结果保存在日志文件中。一些测试应该会导致我的程序中止。不幸的是,我的 makefile 在第一次测试中中止,导致错误。我有类似的东西:

使用上述方法,在 bad_input1 运行后退出,永远不会进入 bad_input2 运行。

0 投票
3 回答
3876 浏览

c++ - make/gmake 的条件依赖

有没有办法直接 make/gmake 对条件依赖采取行动?

我有这个规则:

一般情况下,每个 .cpp 文件都有一个对应的 .h 文件;但是也有一些例外。有没有办法用gmake实现“如果它存在就依赖它”?如果做不到这一点,这种设置是否有最佳实践?

提前致谢; 干杯!

更新:我正在使用 GCC

0 投票
4 回答
176121 浏览

makefile - 如何从另一个 Makefile 调用 Makefile?

从另一个makefile调用一个makefile时,我得到了一些意想不到的结果。我有两个 makefile,一个调用/path/to/project/makefile,一个调用/path/to/project/gtest-1.4.0/make/Makefile. 我试图让前者调用后者。在 /path/to/project/makefile 中,我有

/path/to/project/gtest-1.4.0/make/Makefile我有

发布以下内容:

输出:

但是,当我发出这些命令时:

我懂了:

我不明白:在这两种情况下,/path/to/project/makefile都告诉我它正在进入当前工作目录。在第一种情况下,它认为它没有工作要做(当它有工作时),在第二种情况下,它能够找到适当的指令(当输出告诉我它在错误的目录中查找时)但它会尝试在 中运行rm命令/path/to/project,而不是/path/to/makefile/gtest-1.4.0/make/.

我是否遗漏了一些基本的相互调用 makefile 的东西?我是否犯了一个严重的概念错误,或者遇到了一个常见的陷阱?如何有效地更改目录并从第一个 makefile 中调用第二个?我的理解是,简单地调用make -f <name>就足够了。

这是 bash 中的 make/gmake 3.81。

0 投票
1 回答
1139 浏览

dependencies - 在 make 中纠正自动生成的依赖项(来自 gcc)

我有以下makefile(片段)

当我跑步时,make dev我看到以下内容

当更改src/socket.h(其他人都依赖的文件)并运行make时,我希望它会重建整个项目,但它只发出一个动作

我相信我正确地生成了自动依赖项 - 所以我觉得我根本没有正确使用它们。我哪里出错了?我知道makefile:59:...错误是一个线索,但我以前从未使用过自动生成的依赖项。

提前致谢; 干杯!

0 投票
6 回答
3828 浏览

makefile - 当它不需要做任何事情时,我如何闭嘴?

我如何停止说make: Nothing to be done for 'all'.or make: 'file' is up to date?我希望我的构建在它不做任何事情时保持沉默——还有其他地方echo被调用来跟踪构建进度,所以这个消息只是把事情弄得乱七八糟。我目前正在像这样使其静音:

有些东西告诉我一定有更好的方法。有任何想法吗?

编辑:

但是,当它确实需要构建某些东西时,我想保持命令 echo 工作。我希望的一个很好的例子是沿线--no-print-directory,但我找不到任何其他标志来关闭选定的消息。

0 投票
3 回答
16382 浏览

makefile - 如何在 Makefile.am 脚本中指定我只想编译对象 .o 文件?

我有一个Makefile.am负责构建最终应用程序二进制文件:

在 src 目录中还有一个名为的子目录ctrnn,其中包含一个附加的Makefile.am

现在,ctrnn/Makefile.am应该只生成目标.o文件,其想法是顶级Makefile.am应该使用子目录中生成的目标文件ctrnn来构建二进制文件。

这是ctrnn/Makefile.am

基于这个Makefile.am文件,我想得到 network.o 和 neuron.o。我正在Makefile使用 Automake 等生成相应的文件,但是当我尝试然后执行 make 文件时,它什么也没做,只是说:

我知道这是为什么,我需要指定构建目标。ctrnn/Makefile.am但是,鉴于我不想构建需要bin_PROGRAMS实际目标文件network.o和的二进制文件,我该如何在脚本中执行此操作neuron.o

(请注意,如果我确实指定了 bin_PROGRAMS 名称,它最终会正确地抱怨对 main 的未定义引用)。

我做错了什么?

0 投票
1 回答
6540 浏览

makefile - gnu make、microsoft nmake 和 posix standard make 的相似/不同之处如何?

gnu make、microsoft nmake 和 posix standard make 的相似/不同之处如何?

显然有诸如“哪个操作系统?”,“哪个编译器?”之类的东西。和“哪个链接器?”,但我特别指的是 makefile 本身的语法、语义和命令行选项。

如果我根据 gnu make 的手册编写 makefile,我需要注意的最重要的可移植性问题是什么?