多平台升级版[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