嵌套Makefile问题解决一例

本文详细介绍了如何通过修改Makefile来解决程序编译失败的问题,包括将目录路径声明为伪目标和使用pp作为临时目标两种方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先看一下目录结构

 

image

 

总控Makefile如下:

   1:  CFLAGS=-Wall
   2:  CC=gcc
   3:   
   4:   
   5:  SUBDIRS=server client
   6:   
   7:  export CFLAGS CC
   8:   
   9:   
  10:   
  11:  all:$(SUBDIRS)
  12:   
  13:  $(SUBDIRS):
  14:      make -C $@
  15:   
  16:   
  17:  clean:
  18:      $(RM) server/*.o  server/server 
  19:      $(RM) client/*.o client/client
  20:  .PHONY:clean 

 

另外两个Makefile分别如下:

   1:  server:server.o
   2:      $(CC) $(CFLAGS) $^ -o $@
   3:   
   4:  server.o:server.c
   5:      $(CC) $(CFLAGS) -c $^ -o $@

   1:  client:client.o
   2:      $(CC) $(CFLAGS) $^ -o $@
   3:   
   4:  client.o:client.c
   5:      $(CC) $(CFLAGS) -c $^ -o $@

 

当执行总控Makefile时,出现如下现象:

image 

无法实现程序的编译。

 

解决方法:

方法一、将总控Makefile中的$(SUBDIRS)中的两个路径都声明为 伪目标。

 

   1:  CFLAGS=-Wall
   2:  CC=gcc
   3:   
   4:   
   5:  SUBDIRS=server client
   6:   
   7:  export CFLAGS CC
   8:   
   9:   
  10:   
  11:  all:$(SUBDIRS)
  12:   
  13:  $(SUBDIRS):
  14:      make -C $@
  15:   
  16:   
  17:  clean:
  18:      $(RM) server/*.o  server/server 
  19:      $(RM) client/*.o client/client
  20:  .PHONY:clean server client 

 

再次指向make

image

 

方法二、将总控Makefile作如下修改

 

   1:  CFLAGS=-Wall
   2:  CC=gcc
   3:   
   4:   
   5:  SUBDIRS=server client
   6:   
   7:  export CFLAGS CC
   8:   
   9:   
  10:   
  11:  all:$(SUBDIRS)
  12:   
  13:  $(SUBDIRS):pp
  14:      make -C $@
  15:  pp:
  16:   
  17:  clean:
  18:      $(RM) server/*.o  server/server 
  19:      $(RM) client/*.o client/client
  20:  .PHONY:clean

 

image

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值