c++ - 根据目标修改makefile中的INCS?
问题描述
我有一个生成文件,我想在其中创建一个新目标。现在基本上用于新目标的第三方库版本将是升级版本。我们想为专门使用升级版本的应用程序创建一个新目标。因此,到目前为止,有许多不同的应用程序编译成一个二进制文件(可能不是一件好事,在历史上已经完成)使用该第三方库的旧版本。我们不想制作多个 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 时?
谢谢
解决方案
当然。您可以使用特定于目标的变量分配,它将为目标设置并向下传播到所有依赖项。考虑以下内容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
请注意如何使用不同的包含all
以及app2
如何将其传播到...$(EXEEXT)
目标。
推荐阅读
- .net - 如何从自定义组件启动事件
- python - 来自其他模型的 django 表单字段引用
- php - 无法获取属性 laravel 错误
- python - Python - 在列表中查找所有可能的元素分组
- java - 井字游戏 Java GUI 项目 - 未弹出结束消息
- google-chrome - Chrome Vimeo Iframe 自动播放不再起作用
- sql - 在 SQL 中,如何解决传递集成员关系?
- python - 如何在 ABAQUS GUI 中操作消息处理方法所需的参数
- node.js - 使用 Docker Compose 的领域对象服务器数据适配器
- python - 将带小数的字符串转换为日期时间