如何拆分类似路径名的字符串以在 Makefile 中使用?

发布于 2024-10-16 01:33:15 字数 455 浏览 1 评论 0原文

我有这个 Makefile 代码:

%.spf:
    @echo $@;
    runMe.sh $1 $2 $3 $4 $5;

%.spf 的示例值是:

ros_apple/bananas_go_while_197815:123.0/monkey_110_worst_forever/thestar.spf

如何将文件名的参数提取到变量中?

$1 = ros_apple
$2 = bananas_go_while_197815:123.0
$3 = worst
$4 = 110
$5 = thestar

是否可以保留在 Makefile 中,或者我是否必须创建一些 Perl 脚本来接收 $@ 并在其中进行 shell 调用?

I have this Makefile code:

%.spf:
    @echo $@;
    runMe.sh $1 $2 $3 $4 $5;

An example value of the %.spf would be:

ros_apple/bananas_go_while_197815:123.0/monkey_110_worst_forever/thestar.spf

How would I go about extracting the arguments of the filename into variables?

$1 = ros_apple
$2 = bananas_go_while_197815:123.0
$3 = worst
$4 = 110
$5 = thestar

Is it possible to stay within the Makefile or do I have to create some Perl script that takes in the $@ and does the shell calling within?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

放手` 2024-10-23 01:33:15

您确实需要变量中的路径组件,还是只需要将它们提供给 runMe.sh split ?如果是后者,那么您只需使用 sedtr (或仅使用 sed)即可完成。例如,使用以下内容说 make all

X=ros_apple/bananas_go_while_197815:123.0/monkey_110_worst_forever/thestar.spf
all:
        @echo `echo $X | sed 's:\.spf$::' | tr '/' ' '`

会产生:

ros_apple bananas_go_while_197815:123.0 monkey_110_worst_forever thestar

所以也许可以尝试一下:

%.spf:
        @echo $@
        runMe.sh `echo $X | sed 's:\.spf$::' | tr '/' ' '`

如果您决心在 Perl 中执行此操作,那么您可以将 sedtr 到 Perl 非常容易。

Do you really need the path components in a variable or do you just need to offer them to runMe.sh split? If the latter, then you can get it done with just sed and tr (or just sed). For example, saying make all with this:

X=ros_apple/bananas_go_while_197815:123.0/monkey_110_worst_forever/thestar.spf
all:
        @echo `echo $X | sed 's:\.spf$::' | tr '/' ' '`

produces:

ros_apple bananas_go_while_197815:123.0 monkey_110_worst_forever thestar

So maybe try this:

%.spf:
        @echo $@
        runMe.sh `echo $X | sed 's:\.spf$::' | tr '/' ' '`

If you're dead set on doing it in Perl then you can convert the sed and tr to Perl pretty easily.

毁梦 2024-10-23 01:33:15

无论这有多丑陋,您都可以对 dir 进行嵌套调用 表示组件 1 到 4,notdir 表示基本名称,并且可能使用模式匹配来去掉最后的斜杠。

However ugly this is, you can probably do nested calls to dir for components 1 through 4, and notdir for the basename, and possibly use a pattern match to strip off the final slash.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文