gpt4 book ai didi

c - 如何从 makefile 运行系统调用并将答案保存在变量中

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

我正在尝试设置一个变量的值以在编译期间使用。我尝试在单独的 makefile 目标中执行此操作

svnversion:
SVN_REV=$(shell svnversion -cn | sed -e 's/.*://' -e 's/\([0-9]*\).*/\1/' | grep '[0-9]')
$(info svn_rev = $(SVN_REV))

我读到这是设置变量值的方法。然而,当我运行“make”时,我看到了:

SVN_REV=613
svn_rev =

所以变量似乎是空的。之后,我希望在编译发生时(在其他目标中)出现此变量。是这样吗?还是应该在 svnversion 目标中添加“导出”命令?以及如何处理 SVN_REV 变量? $(SVN_REV) 或 $$(SVN_REV)。

谢谢

最佳答案

您实际上是在该行末尾结束的子 shell 中分配值 SVN_REV,

你可能想要的是:

svnversion:: SVN_REV=$(shell svnversion -cn | sed -e 's/.*://' -e 's/\([0-9]*\).*/\1/' | grep '[0-9]')

svnversion:
$(info svn_rev = $(SVN_REV))

这会在设置目标时设置变量。

如果这不是预期的,假设您想对变量进行一些处理,那么您需要使用可怕的 使每一行成为前一行的延续;\ 在行语义的末尾。如果您随后要引用 shell 变量(如第一行中评估的变量),则需要在变量名之前使用 $$ 语法

例如

svnversion:
SVN_REV=$(shell svnversion -cn | sed -e 's/.*://' -e 's/\([0-9]*\).*/\1/' | grep '[0-9]'); \
echo svn_rev = $$SVN_REV

但是因为它在 shell 中,所以您不能在 $(info 命令中使用该变量,因为它发生在目标评估之外。

关于c - 如何从 makefile 运行系统调用并将答案保存在变量中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7796570/

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