linux configure,【開發工具】之linux下makefile編寫

 2023-10-15 阅读 26 评论 0

摘要:序 在實際工程中,我們通常使用makefile來構建目標文件,本文旨在示例一個簡單的makefile,可根據實際需要更改。 1. 配置相關的宏在config.mk中 新建config,mk #檢測系統 OS = $(shell uname)#設置是否調試 ifeq ($(DEBUG), 0)DEBUG_FLAGS := -O3

在實際工程中,我們通常使用makefile來構建目標文件,本文旨在示例一個簡單的makefile,可根據實際需要更改。

1. 配置相關的宏在config.mk中

新建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

2. 構建法則在makefile中

新建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)

附錄A

A.1 ios下多個架構的靜態庫打包成一個靜態庫的方法
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

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/2/136584.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息