makefile notdir 命令

use*_*003 3 makefile gnu-make

我的源文件不在我需要做的一个目录中 ../ 或 ../../ 东西。

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

用这个: 命令:

$(OBJDIR) $(notdir $(SOURCECODE:.c=.o))
Run Code Online (Sandbox Code Playgroud)

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

thi*_*ton 5

$(addprefix $(OBJDIR),$(notdir $(SOURCECODE:.c=.o)))
Run Code Online (Sandbox Code Playgroud)


Eld*_*mov 5

那是因为您$(OBJDIR)按原样添加到列表中:obj/+foo.c bar.c baz.c给出obj/foo.c bar.c baz.c,这不是您想要的。

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

$(addprefix $(OBJDIR),$(notdir $(SOURCECODE:.c=.o)))
Run Code Online (Sandbox Code Playgroud)