makefile notdir 命令

发布于 2024-12-23 12:19:03 字数 316 浏览 0 评论 0原文

我的源文件不在我需要执行 ../ 或 ../../ 操作的目录中。

之后,我需要更改源文件名,例如: ../ex/test.c 更改为 obj/test.o

,命令:

$(OBJDIR) $(notdir $(SOURCECODE:.c=.o))

但是只有 $(SOURCECODE 中的第一个文件名) (../ex/test.c) 被正确重命名为 obj/test.o,其余的都看起来像 *.o,没有目录信息。

my source files are not inside of one directory which I need to do ../ or ../../ stuff.

after that, I need to change source file name for example: ../ex/test.c to obj/test.o

with this: command:

$(OBJDIR) $(notdir $(SOURCECODE:.c=.o))

however only first filename in $(SOURCECODE) (../ex/test.c) is correctly renamed to obj/test.o, the rest all look like *.o, without directory information.

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

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

发布评论

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

评论(2

绿光 2024-12-30 12:19:03

这是因为您将 $(OBJDIR) 添加到列表中,如下所示: obj/ + foo.c bar.c baz.c 给出 obj/foo.c bar.c baz.c,这不是你想要的。

要将目录添加到列表中的每个文件,请使用 addprefix 函数:

$(addprefix $(OBJDIR),$(notdir $(SOURCECODE:.c=.o)))

That's because you prepend $(OBJDIR) to the list as is: obj/ + foo.c bar.c baz.c gives obj/foo.c bar.c baz.c, which is not what you want.

To add directory to each file in your list use addprefix function:

$(addprefix $(OBJDIR),$(notdir $(SOURCECODE:.c=.o)))
有木有妳兜一样 2024-12-30 12:19:03
$(addprefix $(OBJDIR),$(notdir $(SOURCECODE:.c=.o)))
$(addprefix $(OBJDIR),$(notdir $(SOURCECODE:.c=.o)))
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文