linux - 在 Makefile 中正确使用通配符

标签 linux makefile

我必须使用 makefile 才能将文件夹 1 的所有内容复制到文件夹 2 中。文件夹 1 的内容是 5 个文件,名称分别为 abc_1.c、abc_2.c、.. 等。 文件夹 1 和 2 的路径都作为 makefile 中的变量给出,然后给出复制命令。 问题是,即使使用通配符功能后,我也可以将整个文件夹 1 复制到文件夹 2 中,而不是文件夹 1 的内容。 请帮助我建议一种将文件夹 1 的内容复制到 2 而不是整个文件夹的方法。

以下是我最初使用的代码片段:
PATH_1 =/ace/1/*
PATH_2 =/ace/2/
要复制的代码:shell cp -rf ("$(PATH_1)") ("$(PATH_2)")
请不要介意上面的代码行。

主要问题出现在 PATH_1 中,因为“*”未正确解析且内容未复制。从 PATH_1 中删除“*”后,代码可以正常工作,但它再次将整个文件夹 1 复制到文件夹 2 中。

后来我将Path_1修改如下:
PATH_1 =/ace/1/(通配符 abc_*.c)

还是一样,整个文件夹 1 被复制到文件夹 2 中。 请帮我解决这个问题。

最佳答案

尝试以下几行:

PATH1=/ace/1
PATH2=/ace/2
C_SRCS=$(wildcard $(PATH1)/abc_*.c)

copy:
     cp -vi ${C_SRCS} $(PATH2)

复制选项 v 用于详细信息,i 用于交互,如果您愿意,可以忽略。
此规则将失败并出现错误,C_SRCS 为空,以防止您在这些行上拥有稍微健壮的规则:

copy:
     for C_SRC in ${C_SRCS}; do \
         cp -vi $$C_SRC $(PATH2);  \
     done

希望这有帮助!

关于linux - 在 Makefile 中正确使用通配符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7801405/

相关文章:

c - 生成文件扩展名

c++ - Makefile 并不总是重建

c++ - 如何使用 C++ 在 Linux 中创建窗口?

linux - 如何在 sed shell 命令中使用数组?

linux - 如何在同一个接口(interface)上配置2个IP地址

c - UNIX 域套接字、发送超时、零拷贝

c++ - 如何在QT中使用pro文件重新编译时执行shell命令?

java - eclipse : "make: *** No rule to make target ` 全部'。停止。”

c++ - 不应该应用的 makefile 规则

linux - 将 Windows 批处理脚本转换为 Linux Shell 脚本