c, c++用makefile编译工程

基本思路:

最外层有三个文件: Makefile, Make.share, Make.include.

每个工程目录中都有一个Makefile文件.

其中最外层的Makefile是外壳部分.需要调用者修改里面的某些参数,例如编译平台,要编译的子目录集合,每个工程都要用到的头文件,编译参数等,设置完成后,会进入每个子目录,执行当前子目录中的Makefile文件.

Make.shareMake.include是供每个工程目中Makefile来包含的,里面包含标准Makefile机制所需要文件的代码.

工程目录下的Makefile : 设置每个工程自己的项目类型(可执行程序,静态库,动态库)和工程模块的名字,自己独特的头文件目录,编译、链接参数.在文件的开头包含最外层的Makefile.include,在文件结尾包含最外层的Makefile.share.

 

最外层的Makefile文件 :

##################################################################################################

##################################################################################################

 

# The target platform information.

# You can change the MACRO 'PLATFORM' or use make : make PLATFORM=[IOS, LINUX, MACOS]

# LINUX MACOS IOS

PLATFORM= LINUX

export PLATFORM

 

# SUB DIRS

SUBDIRS:= \

   ./hello/hellostaticlib \

   ./hello/hellodynamiclib \

   ./hello

 

# ROOT DIR

ROOTDIR:=$(shell pwd)

export ROOTDIR

 

# Global includes

GLOBAL_INCLUDES:= -I$(ROOTDIR)/hello/include

export GLOBAL_INCLUDES

 

# Global flags for compile

GLOBAL_CCXXFLAGS:= -g -DUNICODE -D_UNICODE

export GLOBAL_CCXXFLAGS

 

# Target path

TARGET_PATH:=$(ROOTDIR)/target

export TARGET_PATH

 

# IOS SDK Version

IOSSDK_V= 5.0

export IOSSDK_V

 

#IOS CPU

IOS_ARCH= armv6 armv7 i386

export IOS_ARCH

 

##################################################################################################

##################################################################################################

 

SUPPORTCMDS:= all objs clean cleanall rebuild

export SUPPORTCMDS

 

.PHONY: SUPPORTCMDS ioscombine

 

$(SUPPORTCMDS):

ifeq ($(PLATFORM), IOS)

   for subdir in$(SUBDIRS); do \

       echo "Making " $$subdir; \

       for arch in$(IOS_ARCH); do \

           echo "For " $$arch; \

           (cd $$subdir && make clean && make $@ ARCH=$$arch ); \

       done; \

   done;

else

   for subdir in$(SUBDIRS); do \

       echo "Making " $$subdir; \

       (cd $$subdir && make $@); \

   done;

endif

 

TS=$(notdir $(wildcard $(TARGET_PATH)/$(firstword $(IOS_ARCH))/*))

TSA=$(foreach arch, $(IOS_ARCH), $(foreach ts, $(TS), $(TARGET_PATH)/$(arch)/$(ts)))

ioscombine:

   for ts in$(TS); do \

       echo "Make " $$ts; \

       echo$(TSA) | tr ' ' '\n'| grep $$ts | tr '\n' ' ' | xargs echo; \

       echo$(TSA) | tr ' ' '\n'| grep $$ts | tr '\n' ' ' | xargs lipo -create -output$(TARGET_PATH)/$$ts; \

   done;

 

 

最外层的Makefile文件需要修改的有这几个地方:

PLATFORM : 设置目标的平台. LINUX 代表通用linux系统; MACOS 代表mac系统; IOS 代表IPhone,IPad等IOS设备.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值