在Makefile中正确使用Wildcard

时间:2011-10-18 01:10:55

标签: linux makefile

我必须使用makefile才能将文件夹1的所有内容复制到文件夹2.文件夹1的内容是5个文件,名称为abc_1.c,abc_2.c,..等等。 文件夹1和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/(wildcard abc_*.c)

同样的事情,整个文件夹1被复制到文件夹2中。 请帮我解决这个问题。

1 个答案:

答案 0 :(得分:0)

在这些方面尝试一些事情:

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

希望这有帮助!