gnu-make

Makefile 中的“递归扩展变量赋值”和“简单扩展变量赋值”有什么区别?
gnu-make

Makefile 中的“递归扩展变量赋值”和“简单扩展变量赋值”有什么区别?

我对它们之间的区别感到困惑。 我已经阅读了 GNU 文档,但我仍然很困惑。 您指定的值将逐字安装;如果它包含对其他变量的引用,则每当替换该变量时(在扩展某些其他字符串的过程中),这些引用都会扩展。当这种情况发生时,称为递归扩展。 定义变量时,简单扩展变量的值将被扫描一次,扩展对其他变量和函数的任何引用。一旦扩展完成,变量的值就不会再扩展:当使用变量时,该值将被逐字复制作为扩展。如果包含变量的值引用,则扩展的结果将包含定义该变量时的值。 谁能清楚地解释一下他们的区别? 多谢。 ...

Admin

为什么会出现“arm-linux-gcc:未找到”这样的错误?
gnu-make

为什么会出现“arm-linux-gcc:未找到”这样的错误?

为了构建我的主板的 u-boot,我遵循了以下两个命令: $ sudo make nanopi_h3_defconfig ARCH=arm CROSS_COMPILE=arm-linux- $ sudo make ARCH=arm CROSS_COMPILE=arm-linux- 我从第一个命令得到了结果:配置写入.config 这意味着成功。但从第二个命令得到以下内容: make: arm-linux-gcc: No such file or directory /bin/sh: 1: arm-linux-gcc: not found dirname: ...

Admin

make 文件中的日志输出(stdout)
gnu-make

make 文件中的日志输出(stdout)

如何从 make 文件内将输出(stdout)发送到日志文件?我对诸如“make > build.log”之类的命令行解决方案不感兴趣。下面列出的是我的通用 make 文件。 # +--------------------------------------------------------------------------+ # : Uncomment the appropriate section below (comment all others) : # +---------------------------...

Admin

Make 不会在更改时重建模式规则的传递依赖关系,为什么?
gnu-make

Make 不会在更改时重建模式规则的传递依赖关系,为什么?

我有一个Makefile,大致是这样的: .PRECIOUS: %.a %.b %.c %.a: touch $@ %.b: %.a touch $@ %.c: %.b touch $@ 如果我使用 a 创建“test.c” make test.c,则所有 3 个文件(test.a、test.b、test.c)都会正确创建。但是,如果我现在删除test.a,然后尝试重新创建test.c,则什么也不会发生。 原因很明显:因为test.c只依赖于test.b,并且test.b没有改变,所以不需要重建。然而,...

Admin

Makefile 和 pid 文件
gnu-make

Makefile 和 pid 文件

我在 Makefile 中有一些依赖于 pid 文件的便利规则,但有时当进程不存在时 pid 文件仍然存在。在 make 中解决这个问题的好模式是什么? 例如,如果我需要在 qemu 中运行某些内容(构建具有复杂的多体系结构要求): $(QPID): qemu-system... -pidfile "$(QPID)" ... 它工作正常,只启动 qemu 一次,然后在大多数系统上完美关闭,并且依赖于特定类型虚拟机的所有规则只需要依赖于正确的 pidfile 变量。但是对于 systemd 无法在关闭原因时正确向用户进程发出信号的情况,我不想陷入其...

Admin

通过Makefile正确运行交互式命令
gnu-make

通过Makefile正确运行交互式命令

我有一个定制的交互式命令(“repl”),它需要预先执行一系列构建步骤。 由于它提供的缓存功能,Makefile 非常适合这个特定的构建过程。 因此,使用 Make 来生成我使用 Make 构建的 repl 变得非常诱人。 请注意,构建工件不涉及任何交互步骤(这违背了最佳实践):交互式 repl 只是开发的一种提供方式。 我注意到这个交互式 repl 在通过 Make 调用时表现更差: 输出传输速度更慢 有时 repl 会卡住 是否有某种标志或调用可以使交互式命令照常执行? 我正在使用GNU Make 3.81, 与我的 macOS 发行版捆绑在一起。 ...

Admin

在 Linux Lite 上安装新版本的 gnu make 而不进行编译
gnu-make

在 Linux Lite 上安装新版本的 gnu make 而不进行编译

我使用的是 Linux Lite 5.8。安装的gnu make版本是4.2.1,但最新的gnu make版本是4.4.1。 有没有一种简单的方法可以安装这个最新版本而无需从源代码编译? 我找到了这个帖子https://askubuntu.com/a/1386772/1326这似乎指向 4.3 的 deb 包,但存储库链接不再有效,我真的希望获得最新版本的 gnu make。 ...

Admin

当文件不可读时,makefile 错误“错误检查上下文:'无权限读取”
gnu-make

当文件不可读时,makefile 错误“错误检查上下文:'无权限读取”

我遇到了以下错误: make deploy_test error checking context: 'no permission to read from '.../ssh-priv-key''. make: *** [Makefile:24: build_deploy] Error 1 此 ssh-priv-key 文件故意设置为用户不可读。如何避免此权限问题导致 makefile 无法按预期运行? 我无法在网络搜索中找到任何内容,也找不到任何相关内容man make。我正在使用 GNU Make。 ...

Admin

在 makefile 中包含 cURL
gnu-make

在 makefile 中包含 cURL

我在代码中使用curl 并通过Makefile 运行。但是在使用“make”命令运行时,它会给出类似“curl/curl.h:没有这样的文件或目录”的错误。下面是我的 makefile 内容。 ` CXX = /home/directory/Documents/xyz/l4t-gcc/bin/aarch64-buildroot-linux-gnu-cc path = /home/directory/Documents/xyz/l4t-gcc/bin/ CFLAGS = -Wall #INCLUDE = -I/usr/local/include -I/usr/...

Admin

如何在 makefile 中使用 shell 分配,以便它可以与 FreeBSD make (bmake) 和 macOS make (GNU Make 3.81) 一起使用?
gnu-make

如何在 makefile 中使用 shell 分配,以便它可以与 FreeBSD make (bmake) 和 macOS make (GNU Make 3.81) 一起使用?

我想!=在将在 FreeBSD、macOS 和 Linux 上执行的 makefile 中使用 shell 赋值运算符(即 )。这是一个例子: a!= seq 3 .PHONY: all all: $a .PHONY: $a $a: @echo $@ 这是预期的输出: $ touch 1 2 3 $ make all 1 2 3 不幸的是,macOS Monterey 12.6.1 附带的 GNU Make 不支持 shell 赋值运算符,并且该示例的输出为空。它可以在更新版本的 GNU Make 中运行(例如 4.4),这在最近的 Linu...

Admin

调用“make -j16 -l16”失败
gnu-make

调用“make -j16 -l16”失败

我想在 Gazebo 中模拟 Tiago 机器人,并且我正在使用 ROS 可用包。以前我模拟没有问题,但现在不行。我在 KVM 虚拟机上使用 ROS melodic 和 ubuntu 18.04。当我使用catkin_make命令构建工作区时,发生以下错误: [ 1%] Built target _tiago_pick_demo_generate_messages_check_deps_PickUpPoseGoal [ 1%] Generating dynamic reconfigure files from cfg/SphericalGrasp.cfg...

Admin

Remake 仅在需要时才包含 makefile
gnu-make

Remake 仅在需要时才包含 makefile

假设我有一个 Makefile,它有两个“主要”目标:foo.o和clean。前一个有创建文件的方法foo.o。后一种删除所有临时文件。 为了消除手动指定依赖项的需要foo.o,我的目标foo.d是有效的 makefile,以 format 指定依赖项foo.o foo.d : dep1 dep2 depn。该依赖文件包含在 makefile 中。 生成文件如下所示: ;; This buffer is for text that is not saved, and for Lisp evaluation. ;; To create a file, visi...

Admin

在 GNU make 中序列化所有规则:最佳实践?
gnu-make

在 GNU make 中序列化所有规则:最佳实践?

我有一个 makefile 并想确保所有规则是顺序执行的,也就是说,没有并行执行被执行。 我相信我有三种方式实现这一目标: 和.NOTPARALLEL目标, 通过调用make使用make -j 1, 通过直接在 makefile 中设置标志,例如,MAKEFLAGS := -j 1 这三者之间是否存在“最佳实践”,哪一个更稳健? 例如,这样做是否太过分了? MAKEFLAGS := --jobs=1 .NOTPARALLEL: all:foo bar .NOTPARALLEL: foo:bar .NOTPARALLEL: bar: @ech...

Admin

为什么 echo -e 在 Makefile 中表现得很奇怪?
gnu-make

为什么 echo -e 在 Makefile 中表现得很奇怪?

我正在编写一个 Makefile(在 Ubuntu 20.04 上,如果相关的话),并注意到echo.以这个简单的 Makefile 为例: test.txt: @echo -e 'hello\nworld' @echo -e 'hello\nworld' > test.txt 当我运行时make,我希望在 stdout 上看到与 test.txt 中相同的内容,但事实上我没有。我在标准输出上得到这个: hello world 但这在 test.txt 中: -e hello world 同时,如果我-e从 Mak...

Admin

使用 make all-recursive 时出现权限被拒绝错误?
gnu-make

使用 make all-recursive 时出现权限被拒绝错误?

我正在使用 autotools 和 GNU make 构建 C 库,有一行 all: config.h $(MAKE) $(AM_MAKEFLAGS) all-recursive 在 Makefile 中,我编译时出错 make all-recursive make: make: Permission denied make: *** [Makefile:427: all] Error 127 怎么了? ...

Admin