根据目标修改 makefile 中的 INCS?

Modify INCS in makefile depending on target?

我有一个生成文件,我想在其中创建一个新目标。现在基本上用于新目标的第三方库的版本将是升级版。我们想为专门使用升级版本的应用程序创建一个新目标。因此,到目前为止,有许多不同的应用程序被编译成一个二进制文件(可能不是一件好事,历史上这样做过)使用该第三方库的旧版本。我们不想制作多个 GNUmakefile,所以我们考虑添加和构建一个新目标。但是我们有类似 INCS 的东西,它告诉在编译 C++ 代码时要包含哪个文件夹。现在我们已经包含了旧版本的第三方库。如果我的目标不同,INCS 中是否有条件语句包含最新的第三方文件夹?

INCS += \
        -I${DEP_PATH}/3rdPartyLib-1.0/include \
        -I${DEP_PATH}/3rdPartyLib-2.0/include \
        -I${DEP_PATH}/Util/include \

all: Application1${EXEEXT}
     ${EXETOOL} ${CCC} ${CCFLAGS} -o $@ $? $(LIBS)

app2: Application2${EXEEXT}
      ${EXETOOL} ${CCC} ${CCFLAGS} -o $@ $? $(LIBS)

当我们让 app2 使用 3rdPartyLib-2.0 而让所有应用都使用 3rdPartyLib-1.0 时?

谢谢

当然可以。您可以使用 target-specific variable assignments,它将为目标设置并向下传播到所有依赖项。考虑以下 Makefile

DEP_PATH := dep

INCS += \
        -I$(DEP_PATH)/Util/include

all: INCS += -I$(DEP_PATH)/3rdPartyLib-1.0/include
all: Application1$(EXEEXT)

app2: INCS += -I$(DEP_PATH)/3rdPartyLib-2.0/include
app2: Application2$(EXEEXT)

all app2:
        echo Making $@ with INCS = $(INCS)

Application1$(EXEEXT) Application2$(EXEEXT):
        echo Making $@ with INCS = $(INCS)

输出:

$ make -s all app2
Making Application1 with INCS = -Idep/Util/include -Idep/3rdPartyLib-1.0/include
Making all with INCS = -Idep/Util/include -Idep/3rdPartyLib-1.0/include
Making Application2 with INCS = -Idep/Util/include -Idep/3rdPartyLib-2.0/include
Making app2 with INCS = -Idep/Util/include -Idep/3rdPartyLib-2.0/include

请注意 allapp2 使用的包含有何不同,以及它如何传播到 ...$(EXEEXT) 个目标。