多平台升级版[2]Makefile

多平台升级版[2]Makefile

一.目录一览:

[user:多平台升级版[2]Makefile] tree
.
├── app_dev
│   ├── appdev.i386.elf
│   ├── build
│   │   └── i386
│   │       ├── libappdev.i386.a
│   │       ├── print.d
│   │       └── print.o
│   ├── main.cpp
│   ├── Makefile
│   ├── print.cpp
│   └── print.h
├── lib_pub
│   ├── add.cpp
│   ├── add.h
│   ├── build
│   │   └── i386
│   │       ├── add.d
│   │       ├── add.o
│   │       ├── del.d
│   │       ├── del.o
│   │       └── libpub.i386.a
│   ├── del.cpp
│   ├── del.h
│   └── Makefile
└── Makefile

6 directories, 19 files

 

二.Makefile文件详情:

1.顶层Makefile:

[user:多平台升级版[2]Makefile] cat Makefile

ifeq ($(ARCH),)
ARCH := i386
endif

TOPDIR=$(shell realpath .)

export ARCH TOPDIR

.PHONY: all clean help

all:
 @make all -C $(TOPDIR)/lib_pub
 @make all -C $(TOPDIR)/app_dev

clean:
 @make clean -C $(TOPDIR)/lib_pub
 @make clean -C $(TOPDIR)/app_dev

help:
 @echo "make help                              帮助文档"
 @echo "make [<ARCH=arm> <ARCH=i386>]          选择平台编译"
 @echo "make clean [<ARCH=arm> <ARCH=i386>]    选择平台清除"

[user:多平台升级版[2]Makefile]

 

2.app_dev目录的Makefile:

[user:多平台升级版[2]Makefile] cat app_dev/Makefile


CURDIR=$(shell basename $(shell realpath .))
SRCS=$(filter-out main.cpp,$(wildcard *.cpp))
OBJS=$(SRCS:.cpp=.o)
DEPS=$(SRCS:.cpp=.d)
BUILD=build
LIBNAME=appdev
TARGET=$(LIBNAME).$(ARCH).elf

.PHONY: all clean help

all : $(TARGET)

$(BUILD)/$(ARCH)/%.d : %.cpp
 mkdir -p $(BUILD)/$(ARCH); \
 rm -rf $@; \
 g++ -MM $< > $@.$$$$; \
 sed 's,\($*\)\.o[ :]*,$(BUILD)\/$(ARCH)\/\1.o $@ : ,g' < $@.$$$$ > $@; \
 rm -rf $@.$$$$

auto_deps = 0
ifeq (,$(MAKECMDGOALS))
auto_deps = 1
else ifeq (all, $(findstring all, $(MAKECMDGOALS)))
auto_deps = 1
endif

ifeq (1, $(auto_deps))
-include $(addprefix $(BUILD)/$(ARCH)/,$(DEPS))
endif

 

$(TARGET) : $(addprefix $(BUILD)/$(ARCH)/,$(OBJS))
 ar rcs $(BUILD)/$(ARCH)/lib$(LIBNAME).$(ARCH).a $^
 g++ -o $(TARGET) main.cpp -L$(TOPDIR)/$(CURDIR)/$(BUILD)/$(ARCH)/ -L$(TOPDIR)/lib_pub/$(BUILD)/$(ARCH)/ -lappdev.$(ARCH) -lpub.$(ARCH)

$(BUILD)/$(ARCH)/%.o : %.cpp
 g++ -c $< -o $@

clean:
 rm *.o *.d *.elf build -rf

help:
 @echo "make help                              帮助文档"
 @echo "make [<ARCH=arm> <ARCH=i386>]          选择平台编译"
 @echo "make clean [<ARCH=arm> <ARCH=i386>]    选择平台清除"
[user:多平台升级版[2]Makefile]

 

3.lib_pub目录的Makefile:

[user:多平台升级版[2]Makefile] cat lib_pub/Makefile

SRCS=$(wildcard *.cpp)
OBJS=$(SRCS:.cpp=.o)
DEPS=$(SRCS:.cpp=.d)
BUILD=build
LIBNAME=pub
TARGET=$(LIBNAME).$(ARCH).elf

.PHONY: all clean help

all : $(TARGET)

$(BUILD)/$(ARCH)/%.d : %.cpp
 mkdir -p $(BUILD)/$(ARCH); \
 rm -rf $@; \
 g++ -MM $< > $@.$$$$; \
 sed 's,\($*\)\.o[ :]*,$(BUILD)\/$(ARCH)\/\1.o $@ : ,g' < $@.$$$$ > $@; \
 rm -rf $@.$$$$

auto_deps = 0
ifeq (,$(MAKECMDGOALS))
auto_deps = 1
else ifeq (all, $(findstring all, $(MAKECMDGOALS)))
auto_deps = 1
endif

ifeq (1, $(auto_deps))
-include $(addprefix $(BUILD)/$(ARCH)/,$(DEPS))
endif

$(TARGET) : $(addprefix $(BUILD)/$(ARCH)/,$(OBJS))
 ar rcs $(BUILD)/$(ARCH)/lib$(LIBNAME).$(ARCH).a $^

$(BUILD)/$(ARCH)/%.o : %.cpp
 g++ -c $< -o $@

clean:
 rm *.o *.d *.elf build -rf

help:
 @echo "make help                              帮助文档"
 @echo "make [<ARCH=arm> <ARCH=i386>]          选择平台编译"
 @echo "make clean [<ARCH=arm> <ARCH=i386>]    选择平台清除"

 

 

其它内容略过,有疑问请看回第一步:简单makefile

 

 


 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值