Makefile,宏修饰符

时间:2013-11-13 19:25:43

标签: macros path makefile substitution modifiers

我对编写make文件比较新,可以使用一些指针。我想要实现的可能是相当基本的,但在搜索网络后我无法理解如何。

我想将一组目标文件从src目录编译成构建目录,我的天真想法是将源文件集定义为宏,使用宏修饰符为目标文件创建宏(所以这些与重新编译时的源文件进行了适当的比较。我目前创建目标文件宏的方案看起来像:

SRCDIR = /some/dir/
BUILDDIR = /some/dir/
CSRC = \
        $(SRCDIR)f1.c \
        $(SRCDIR)f2.c \

OSRC = $(CSRC,.c=.o,F,<$(BUILDDIR))

all:
    @echo $(OSRC)

只需输入all规则来检查目标文件宏是否设置正确。不幸的是,它不是,而是空的。替换

OSRC = $(CSRC,.c=.o,F,<$(BUILDDIR))

通过

OSRC = $(CSRC:.c=.o)

确实给了我一个目标文件的宏,但没有正确的目录。因此,有关如何修改我的文件以获得我想要的东西的见解将不胜感激。 (我正在使用GNU Make 3.82)

1 个答案:

答案 0 :(得分:2)

我不知道你在哪里$(CSRC,.c=.o,F,<$(BUILDDIR));在GNU make中,没有什么比这种语法更远的了。

语句$(CSRC:.c=.o)将所有.c后缀替换为.o,但这对您没有帮助,因为您还想要替换目录。

您应该使用$(patsubst ...)功能:

OSRC = $(patsubst $(SRCDIR)%.c,$(BUILDDIR)%.o,$(CSRC))