先看一下目录结构

 

嵌套Makefile问题解决一例

 

总控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时,出现如下现象:

嵌套Makefile问题解决一例 

无法实现程序的编译。

 

解决方法:

方法一、将总控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

嵌套Makefile问题解决一例

 

方法二、将总控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

 

嵌套Makefile问题解决一例

相关文章:

  • 2022-12-23
  • 2021-11-17
  • 2022-12-23
  • 2022-12-23
  • 2021-12-05
  • 2022-12-23
猜你喜欢
  • 2021-12-28
  • 2022-12-23
  • 2022-01-02
  • 2022-12-23
  • 2021-06-09
  • 2022-02-16
  • 2022-12-23
相关资源
相似解决方案