theos Makefile

Makefile

theos的makefile写法与其他linux/unix环境下的makefile写法大同小异,但是对于makefile不熟悉的在导入一些dylib或者framework的时候就会变得很蛋疼。

对于framework可以直接通过Frameworks和private frameworks来导入,但是dylib文件却不能那么简单的写进去,如果要引用zlib,那么如果写成xxx_LDFLAGS =  -zlib,虽然在编译的时候不会提示找不到对应的lib库但是却会提示找不到相关的符号。

这个东西的写法比较蛋疼,例如要调用libz.1.2.5.dylib ,那么写法是去掉前面的lib和最后的.dylib,然后将剩余部分拼到-l后面也就是上图中看到的那个样子:

xxx_LDFLAGS = -lz.1.2.5

详细信息可以参考这个页面:https://github.com/DHowett/theos/issues/15

一个makefile模板:

#
 # Use this makefile to compile service project.
 # When change SDK or add new files ,re-edit values below.
 # zhj
 # 2012-07-17
 # txtw
 #
 
 export THEOS=/opt/theos/
 export SDKVERSION=5.1
 export THEOS_DEVICE_IP=10.0.2.3
 #192.168.1.157
 #10.0.2.2
 export CURRENT_VERSION = 1104
 
 include theos/makefiles/common.mk
 
 TWEAK_NAME = service
 
 RESOURCE_DIR = Resources
 
 DEBUG = 1
 
 #SUBPROJECTS=servicePreferences
 
 #编译单元
 #
 #
 
 
 #编译 ----------------------------ASIHTTPRequest--------------------
 service_FILES += ASIHTTPRequest/ASIAuthenticationDialog.m
 service_FILES += ASIHTTPRequest/ASIDownloadCache.m
 service_FILES += ASIHTTPRequest/ASIFormDataRequest.m
 service_FILES += ASIHTTPRequest/ASIHTTPRequest.m
 service_FILES += ASIHTTPRequest/ASIInputStream.m
 service_FILES += ASIHTTPRequest/ASINetworkQueue.m
 service_FILES += ASIHTTPRequest/Reachability.m
 
 #编译 ----------------------------Encoder---------------------------
 service_FILES += Encoder/CrypHelper.m
 service_FILES += Encoder/GTMBase64.m
 service_FILES += Encoder/NSData+Base64.m
 service_FILES += Encoder/NSString+MD5Addition.m
 service_FILES += Encoder/UIDevice+IdentifierAddition.m
 
 #编译 ----------------------------TBXML-----------------------------
 service_FILES += TBXML/NSDataAdditions.m
 service_FILES += TBXML/TBXML.m
 
 #编译 ----------------------------Regex-----------------------------
 service_FILES += Regex/RegexKitLite.m
 
 #编译 ----------------------------Constant--------------------------
 service_FILES += Constant/Constant.m
 service_FILES += Constant/UserDefaults.m
 
 #编译 ----------------------------SOAP-----------------------------
 service_FILES += SOAP/Head.m
 service_FILES += SOAP/Body.m
 
 #编译 ----------------------------MsgService-----------------------------
 service_FILES += MsgService/MsgService.m
 service_FILES += MsgService/MessageInfo.m
 service_FILES += MsgService/Msgs/NetBrain.m
 service_FILES += MsgService/Msgs/KeepAliveReturnMsg.m
 service_FILES += MsgService/Msgs/DevBindReturnMsg.m
 service_FILES += MsgService/Msgs/FamilyPhoneMsg.m
 service_FILES += MsgService/Msgs/LocationMsg.m
 
 #编译 ----------------------------ParseXML-----------------------------
 service_FILES += ParseXML/ParseXML.m
 
 
 #编译 ----------------------------Command---------------------------------
 service_FILES += Command/TxtwCommand.m
 
 #编译 ----------------------------BaiduMap---------------------------------
 service_FILES += BaiduMap/MapPointAnnotion.m
 
 #编译 ----------------------------service-----------------------------
 service_FILES += service/service.mm
 service_FILES += Tweak.xm
 
 
 #连接单元
 #
 #连接 ----------------------------framework--------------------------
 service_FRAMEWORKS = Foundation UIKit QuartzCore Foundation CoreFoundation CoreGraphics  MobileCoreServices
 service_FRAMEWORKS += SystemConfiguration  CFNetwork CoreTelephony CoreLocation MapKit
 
 
 #连接 ----------------------------dylib------------------------------
 service_LDFLAGS = -lxml2 -lz -licucore -lgcc -lgcc_eh -lstdc++ 
 service_LDFLAGS += -L./BaiduMap/inc -R./BaiduMap/inc/ -lbaidumapapi
 
 #编译器 ----------------------------------------------------------
 #service_CFLAGS += -std=c99 
 #service_CFLAGS += -all_load
 
 #资源文件 ----------------------------------------------------------
 internal-package::
    ifneq ($(wildcard $(RESOURCE_DIR)/*.png), )
     mkdir -p $(THEOS_STAGING_DIR)/Library/PreferenceLoader/Preferences/$(TWEAK_NAME)
     cp $(RESOURCE_DIR)/*.png $(THEOS_STAGING_DIR)/Library/PreferenceLoader/Preferences/$(TWEAK_NAME)/
    endif
    ifneq ($(wildcard $(RESOURCE_DIR)/*.lproj), )
     mkdir -p $(THEOS_STAGING_DIR)/Library/PreferenceLoader/Preferences/$(TWEAK_NAME)
     rsync -avC $(RESOURCE_DIR)/*.lproj $(THEOS_STAGING_DIR)/Library/PreferenceLoader/Preferences/$(TWEAK_NAME)
    endif
    ifneq ($(wildcard $(RESOURCE_DIR)/$(TWEAK_NAME).plist), )
     mkdir -p $(THEOS_STAGING_DIR)/Library/PreferenceLoader/Preferences/$(TWEAK_NAME)
     cp $(RESOURCE_DIR)/$(TWEAK_NAME).plist $(THEOS_STAGING_DIR)/Library/PreferenceLoader/Preferences/$(TWEAK_NAME)
    endif
 
 include $(THEOS_MAKE_PATH)/tweak.mk

注释:

9~14行属于系统配置部分:其中11行是调试设备的IP地址
  16行是引入常用的一般模板
  18行工程名称
  20行存放资源文件的本地目录名称:可以自定义 主要是在生成包拷贝时使用
  22行是否是调试状态:常用的一个宏设置是否显示NSLog 区分是debug还是release 也可以自己尝试设置其他宏变量
  26~83行是编译所需要的的源文件
  88~90行是sdk中的framework
  93~95行是需要的一些系统静态库和第三方静态库
  97~99行是编译器参数设置
  101~114行是拷贝资源文件
  116行是引入tweak模板

参考链接:
https://github.com/DHowett/theos/issues/15
http://www.cnblogs.com/qiezi/archive/2012/09/29/2708726.html
https://github.com/DHowett/theos

☆版权☆

* 网站名称:obaby@mars
* 网址:https://h4ck.org.cn/
* 个性:https://oba.by/
* 本文标题: 《theos Makefile》
* 本文链接:https://h4ck.org.cn/2013/07/5253
* 短链接:https://oba.by/?p=5253
* 转载文章请标明文章来源,原文标题以及原文链接。请遵从 《署名-非商业性使用-相同方式共享 2.5 中国大陆 (CC BY-NC-SA 2.5 CN) 》许可协议。


You may also like

3 comments

    1. 公主 Queen 
      Opera 12 Opera 12 Windows 7 Windows 7 cn中国–山东–青岛 联通

      有的东西看起来是那么玩,但是写起来却不是那么办的。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注