根据规则进行过滤

发布于 2024-12-10 03:22:10 字数 214 浏览 1 评论 0原文

这样的 make 规则

我有一个像app.o: app.c bc ac hh file.list

,我正在使用规则 $^ 对所有依赖项执行一些操作。 但我想根据依赖项的文件扩展名进行过滤。 我怎样才能做到这一点?

我想要一个变量

k =(仅包含依赖项列表中的.c文件)

I have a make rule like

app.o: app.c b.c a.c h.h file.list

I am using rule $^ to do some action on all dependency.
But I want to filter based on file extension on dependency.
How can I do that ?

I want a variable

k = (which contain only .c file from dependency list )

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

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

发布评论

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

评论(1

前事休说 2024-12-17 03:22:10

如果您使用GNU Make,那么

$(filter %.c,$^)

就可以解决问题(过滤器返回列表中与给定模式匹配的所有单词,过滤器返回不匹配的单词)。如果您使用一些更原始的 make,则必须求助于

APP_O_C_DEPS = app.c b.c a.c
APP_O_NONC_DEPS = h.h file.list
app.o: $(APP_O_C_DEPS) $(APP_O_NONC_DEPS)
        ...

注意: Make 中变量的工作方式允许您说

c_deps = $(filter %.c,$^)
app.o: app.c b.c a.c h.h file.list
    something $(c_deps)

,它将扩展到当前目标的 .c 依赖项。

If you are using GNU Make, than

$(filter %.c,$^)

will do the trick (filter returns all words matching given pattern from a list, filter-out returns the non-matching ones). If you are using some more primitive make, you'll have to resort to

APP_O_C_DEPS = app.c b.c a.c
APP_O_NONC_DEPS = h.h file.list
app.o: $(APP_O_C_DEPS) $(APP_O_NONC_DEPS)
        ...

Note: The way variables work in Make allows you to say

c_deps = $(filter %.c,$^)
app.o: app.c b.c a.c h.h file.list
    something $(c_deps)

and it will expand to the .c dependencies of current target.

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