gpt4 book ai didi

makefile - 如何在 makefile 中写入 'cd' 命令?

转载 作者:行者123 更新时间:2023-12-03 03:59:55 24 4
gpt4 key购买 nike

例如,我的 makefile 中有这样的内容:

all:
cd some_directory

但是当我输入 make 时,我只看到“cd some_directory”,就像在 echo 命令中一样。

最佳答案

它实际上是在执行命令,将目录更改为 some_directory,但是,这是在子进程 shell 中执行的,不会影响 make 或您正在使用的 shell。

如果您希望在 some_directory 中执行更多任务,您需要添加分号并附加其他命令。请注意,您不能使用新行,因为 make 将它们解释为规则的结尾,因此为了清楚起见,您使用的任何新行都需要用反斜杠转义。

例如:

all:
cd some_dir; echo "I'm in some_dir"; \
gcc -Wall -o myTest myTest.c

另请注意,即使您添加反斜杠和换行符,每个命令之间也必须使用分号。这是因为整个字符串被 shell 解析为一行。正如注释中所指出的,您应该使用“&&”来连接命令,这意味着只有前面的命令成功时才会执行它们。

all:
cd some_dir && echo "I'm in some_dir" && \
gcc -Wall -o myTest myTest.c

这在进行破坏性工作(例如清理)时尤其重要,因为如果 cd 由于某种原因失败,您就会破坏错误的东西。

不过,常见的用法是在您可能想要查看的子目录中调用 make。为此有一个命令行选项,因此您不必自己调用 cd,因此您的规则将如下所示

all:
$(MAKE) -C some_dir all

它将更改为some_dir并执行该目录中的Makefile,目标为“all”。最佳实践是使用 $(MAKE) 而不是直接调用 make,因为它会小心地调用正确的 make 实例(例如,如果您使用适合您的构建环境的特殊 make 版本),并在使用某些开关(例如 -t)运行时提供略有不同的行为。

郑重声明,make总是回显它执行的命令(除非明确禁止),即使它没有输出,这就是您所看到的。

关于makefile - 如何在 makefile 中写入 'cd' 命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1789594/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com