在實際工程中,我們通常使用makefile來構建目標文件,本文旨在示例一個簡單的makefile,可根據實際需要更改。
新建config,mk
#檢測系統
OS = $(shell uname)#設置是否調試
ifeq ($(DEBUG), 0)DEBUG_FLAGS := -O3
elseDEBUG_FLAGS := -G
endif#########################################
############linux系統 ###################
ifeq ($(findstring Linux, $(OS)), Linux)CROSS ?= CC := $(CROSS)gcc -fPIC -DPICCPP := $(CROSS)g++ -fPIC -DPICLD := $(CROSS)ldAR := $(CROSS)arASM := yasm -DPIC###ARM32架構
ifeq ($(platform), arm32)ARCH_DEF :=EXTRA_CFLAGS := -march=armv7-a -marm $(ARCH_DEF)EXTRA_LFLAGS := -march=armv7-a -marm EXTRA_AFLAGS := -march=armv7-a $(ARCH_DEF)OUT_DIR := ./bin/arm32
endif###ARM64架構
ifeq ($(platform), arm64)ARCH_DEF :=EXTRA_CFLAGS := -march=armv8-a $(ARCH_DEF)EXTRA_LFLAGS := -march=armv8-a EXTRA_AFLAGS := -march=armv8-a $(ARCH_DEF)OUT_DIR := ./bin/arm64
endif###X86_32架構
ifeq ($(platform), x86_32)ARCH_DEF :=EXTRA_CFLAGS := -m32 $(ARCH_DEF)EXTRA_LFLAGS := -m32 -sharedEXTRA_AFLAGS := -m x86 $(ARCH_DEF)OUT_DIR := ./bin/x86m32
endif###X86_64架構
ifeq ($(platform), x86_64)ARCH_DEF :=EXTRA_CFLAGS := -m64 $(ARCH_DEF)EXTRA_LFLAGS := -m64 -shared -Wl, -BsymbolicEXTRA_AFLAGS := -m amd64 $(ARCH_DEF)OUT_DIR := ./bin/x86m64
endifendif#########################################
############MAC/IOS系統 ###################
ifeq ($(findstring Darwin, $(OS)), Darwin) ###MAC平臺
ifeq ($(target_plat), mac)CROSS ?= CC := $(CROSS)gcc -fPIC -DPICCPP := $(CROSS)g++ -fPIC -DPICAR := $(CROSS)arASM := yasm -DPIC##X86_32架構
ifeq ($(platform), x86_32)ARCH_DEF :=EXTRA_CFLAGS := -m32EXTRA_LFLAGS := -m32 -dynamiclib -Wl, -dynamic -Wl, -read_only_relocs, suppressEXTRA_AFLAGS := -f macho32 -m x86OUT_DIR := ./bin/mac32
endif##X86_64架構
ifeq ($(platform), x86_64)ARCH_DEF :=EXTRA_CFLAGS := -m64EXTRA_LFLAGS := -m64 -dynamiclib -Wl, -dynamicEXTRA_AFLAGS := -f macho64 -m amd64OUT_DIR := ./bin/mac64
endifendif###IOS平臺
ifeq ($(target_plat), ios)CROSS := iphone
ifeq ($(platform), ios32)CC := xcrun -sdk $(CROSS)os clangCPP := g++AR := arASM := gas-preprocessor.pl -arch arm -as-type apple-clang --$(CC)ARCH_DEF :=EXTRA_CFLAGS := -arch armv7 -mios-version-min=6.0EXTRA_LFLAGS := -arch armv7 -mios-version-min=6.0EXTRA_AFLAGS := -arch armv7 -mios-version-min=6.0OUT_DIR := ./bin/ios32
endififeq ($(platform), ios64)CC := xcrun -sdk $(CROSS)os clangCPP := g++AR := arASM := gas-preprocessor.pl -arch aarch64 -as-type apple-clang --$(CC)ARCH_DEF :=EXTRA_CFLAGS := -arch arm64 -mios-version-min=6.0EXTRA_LFLAGS := -arch arm64 -mios-version-min=6.0EXTRA_AFLAGS := -arch arm64 -mios-version-min=6.0OUT_DIR := ./bin/ios64
endif ifeq ($(platform), ios_sim32)CC := xcrun -sdk $(CROSS)simulators clangCPP := g++AR := arASM := yasmARCH_DEF :=EXTRA_CFLAGS := -arch i386 -mios-simulator-version-min=6.0EXTRA_LFLAGS := -arch i386 -mios-simulator-version-min=6.0 -Wl, -Bsymbolic-functions -read_only_relocs suppressEXTRA_AFLAGS := -f macho32 -m x86OUT_DIR := ./bin/ios_sim
endif ifeq ($(platform), ios_sim64)CC := xcrun -sdk $(CROSS)simulators clangCPP := g++AR := arASM := yasmARCH_DEF :=EXTRA_CFLAGS := -arch x86_64 -mios-simulator-version-min=6.0EXTRA_LFLAGS := -arch x86_64 -mios-simulator-version-min=6.0EXTRA_AFLAGS := -f macho64 -m amd64OUT_DIR := ./bin/ios_sim
endif endif ##ifeq ($(target_plat), ios)endif
新建Makefile
include config.mkSRC_PATH := ../src
INCLUDE_PATH:= ../include
LIB_PATH := $(OUT_DIR)
LIB_NAME := xxxARFLAGS := cruCFLAGS := $(DEBUG_FLAGS)
CFLAGS +=$(EXTRA_CFLAGS) -I$(INCLUDE_PATH)ASMFLAGS :=
ASMFLAGS += $(EXTRA_AFLAGS) -I$(INCLUDE_PATH)LDFALGS := -lm -ldl
LDFALGS += $(EXTRA_LFLAGS)LIB := $(LIB_PATH)/$(LIB_NAME).a $(LIB_PATH)/$(LIB_NAME).soOBJS := $(SRC_PATH)/x.o \$(SRC_PATH)/y.oall: clean $(LIB)$(filter %.a, $(LIB)):$(OBJS)$(AR) $(ARFLAGS) $@ $^$(filter %.so, $(LIB)):$(OBJS)$(CC) $(LDFALGS) -shared -o $@ $^%.o:%.c$(CC) -o $< $(CFLAGS) -o $@%.o:%.asm$(ASM) $< $(ASMFLAGS) -o $@clean:rm -rf $(OBJS)rm -rf $(LIB)
lipo -create $(shell pwd)/../* -output $(shell pwd)/../xxx.a
1、參考網址:https://bitmingw.com/2015/03/21/general-makefile/
2、參考網址:https://github.com/switchbrew/34c3-demo/blob/master/Makefile
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态