You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

FreeBSD make使用大括号语法复制多文件失败,求适配方案

FreeBSD Make 大括号扩展问题的解决方案

问题原因

FreeBSD 原生的/usr/bin/make不会将命令直接传递给指定的Shell(比如bash)处理,它会先自行解析命令行,因此不支持Shell的大括号扩展语法{file1,file2}。而GNU make(gmake)会直接把命令交给指定Shell处理,所以能正常解析大括号。

适配FreeBSD Make的调整方法

方法1:显式调用bash执行带大括号的命令

将命令用bash -c包裹,让bash负责解析大括号扩展:

SHELL=/bin/bash
copy:
    @bash -c 'cp /dir1/dir2/{file1,file2} /dir3/'

方法2:使用Make的循环遍历文件列表

借助Make的变量和Shell循环,避免依赖大括号扩展:

TARGET_FILES = file1 file2
copy:
    @for fname in $(TARGET_FILES); do cp /dir1/dir2/$$fname /dir3/; done

注意这里用$$fname是为了转义Make的变量解析,让Shell能正确拿到文件名变量。

方法3:直接列出所有目标文件

如果文件数量不多,直接在cp命令中列出所有文件,最简单直接:

copy:
    @cp /dir1/dir2/file1 /dir1/dir2/file2 /dir3/

内容的提问来源于stack exchange,提问作者ABHISHEK PATIL

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 10:43:12