make -C DST_DIR=(SERVICE_DIR) INCLUDE=$(INCLUDE)

在编写makefile的过程中遇到了这样的一个问题,问题的简单介绍如下:

SERVICE_DIR=$(PWD)/service/

SERVICE_TARGET=scan

INCLUDE=-I$(PWD)/dir1

INCLUDE+=-I$(PWD)/dir2

INCLUDE+=-I$(PWD)/dir3

service:$(SERVICE_OBJS)

make -C $(SERVICE_DIR) INCLUDE=$(INCLUDE) TARGET=$(SERVICE_TARGET)

上面是截取的makefile的一个片段,目的是在顶层的makefile中调用service目录的makefile,进而生成一个service程序,但是在真正编译的提示却提示错误,错误是在编译service中的某个.c文件时提示dir3中的一个头文件找不到,这个.c文件包含了dir3中的这个头文件。

$INCLUDE变量包含了这三个头文件目录了,为什么还提示找不到呢,我看makefile在执行的过程是,在make -C这一行INCLUDE替换后是包含了三个头文件目录,但是进入service目录以后编译service目录中的程序时却只包含了dir1目录,为什么会这样呢?

最后发现了问题,$(INCLUDE)进入到service目录以后service中的makefile只识别了其中的第一个dir1目录,把剩余的两个目录全部丢弃掉了,进而只看到使用了第一个目录,修改方法是将INCLUDE=$(INCLUDE)修改为INCLUDE="$(INCLUDE)",这样,service中的makefile就会把$(INCLUDE)当做一个整体处理,添加完""之后再进行编译就成功编译通过了。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值