gmake包含基于构建目标的目标文件

时间:2014-05-12 11:47:33

标签: makefile gnu-make target

我有一个Makefile,然后是子文件夹中的targets.mk文件。

我想基于命令行构建目标构建一个子目标文件。

'make plugin'

如果我在Makefile中尝试这样的东西,它不会在子文件夹中构建target.mk

plugin: BUILD_PLUGIN=Yes
all:    libraries binaries

ifeq($(BUILD_PLUGIN),Yes
    include subfolder/targets.mk
endif

任何人都知道如何做到这一点?我使用MAKECMDGOALS似乎没有太多运气。

targets.mk的内容是:

PLUGIN_SRCDIR=myplugin
PLUGIN_CPP_SRCS=\
    $(PLUGIN_SRCDIR)/coder.cpp\

PLUGIN_OBJS += $(PLUGIN_CPP_SRCS:.cpp=.o)

OBJS += $(PLUGIN_OBJS)
$(PLUGIN_SRCDIR)/%.o: $(PLUGIN_SRCDIR)/%.cpp
    $(QUIET_CXX)$(CXX) $(CFLAGS) $(CXXFLAGS) $(INCLUDES) $(PLUGIN_CFLAGS) $(PLUGIN_INCLUDES) -c $(CXX_O) $<

$(LIBPREFIX)myplugin.$(LIBSUFFIX): $(PLUGIN_OBJS)
    $(QUIET)rm -f $@
    $(QUIET_AR)$(AR) $(AR_OPTS) $+

libraries: $(LIBPREFIX)myplugin.$(LIBSUFFIX)
LIBRARIES += $(LIBPREFIX)myplugin.$(LIBSUFFIX)

感谢。

1 个答案:

答案 0 :(得分:0)

以下Makefile将根据命令make plugin构建子文件夹:

all: libraries binaries
plugin:
    $(MAKE) -C subfolder -f targets.mk
libraries binaries:
    echo building $@

我没有关注图书馆和二进制文件的目标。但是,它仍默认为所有目标。由于第一个目标是默认目标,因此如果指定什么都不做,则需要放置一个不作为第一个目标的目标。