iphone JB開發小記(五)theos的makefile


 theos 是初期ios插件開發者經常使用的工具,現在被集成在iosOpenDev的logos所實現,不需要再自己寫makefile來實現
程序的自動編譯。不過這里還是要簡單的介紹一下如何寫一個插件的makefile,這樣更有利於理解編譯機制.

 以下是一個我自己工程中用到的makefile:

  1 #
  2 # Use this makefile to compile service project.
  3 # When change SDK or add new files ,re-edit values below.
  4 # zhj
  5 # 2012-07-17
  6 # txtw
  7 #
  8 
  9 export THEOS=/opt/theos/
 10 export SDKVERSION=5.1
 11 export THEOS_DEVICE_IP=10.0.2.3
 12 #192.168.1.157
 13 #10.0.2.2
 14 export CURRENT_VERSION = 1104
 15 
 16 include theos/makefiles/common.mk
 17 
 18 TWEAK_NAME = service
 19 
 20 RESOURCE_DIR = Resources
 21 
 22 DEBUG = 1
 23 
 24 #SUBPROJECTS=servicePreferences
 25 
 26 #編譯單元
 27 #
 28 #
 29 
 30 
 31 #編譯 ----------------------------ASIHTTPRequest--------------------
 32 service_FILES += ASIHTTPRequest/ASIAuthenticationDialog.m
 33 service_FILES += ASIHTTPRequest/ASIDownloadCache.m
 34 service_FILES += ASIHTTPRequest/ASIFormDataRequest.m
 35 service_FILES += ASIHTTPRequest/ASIHTTPRequest.m
 36 service_FILES += ASIHTTPRequest/ASIInputStream.m
 37 service_FILES += ASIHTTPRequest/ASINetworkQueue.m
 38 service_FILES += ASIHTTPRequest/Reachability.m
 39 
 40 #編譯 ----------------------------Encoder---------------------------
 41 service_FILES += Encoder/CrypHelper.m
 42 service_FILES += Encoder/GTMBase64.m
 43 service_FILES += Encoder/NSData+Base64.m
 44 service_FILES += Encoder/NSString+MD5Addition.m
 45 service_FILES += Encoder/UIDevice+IdentifierAddition.m
 46 
 47 #編譯 ----------------------------TBXML-----------------------------
 48 service_FILES += TBXML/NSDataAdditions.m
 49 service_FILES += TBXML/TBXML.m
 50 
 51 #編譯 ----------------------------Regex-----------------------------
 52 service_FILES += Regex/RegexKitLite.m
 53 
 54 #編譯 ----------------------------Constant--------------------------
 55 service_FILES += Constant/Constant.m
 56 service_FILES += Constant/UserDefaults.m
 57 
 58 #編譯 ----------------------------SOAP-----------------------------
 59 service_FILES += SOAP/Head.m
 60 service_FILES += SOAP/Body.m
 61 
 62 #編譯 ----------------------------MsgService-----------------------------
 63 service_FILES += MsgService/MsgService.m
 64 service_FILES += MsgService/MessageInfo.m
 65 service_FILES += MsgService/Msgs/NetBrain.m
 66 service_FILES += MsgService/Msgs/KeepAliveReturnMsg.m
 67 service_FILES += MsgService/Msgs/DevBindReturnMsg.m
 68 service_FILES += MsgService/Msgs/FamilyPhoneMsg.m
 69 service_FILES += MsgService/Msgs/LocationMsg.m
 70 
 71 #編譯 ----------------------------ParseXML-----------------------------
 72 service_FILES += ParseXML/ParseXML.m
 73 
 74 
 75 #編譯 ----------------------------Command---------------------------------
 76 service_FILES += Command/TxtwCommand.m
 77 
 78 #編譯 ----------------------------BaiduMap---------------------------------
 79 service_FILES += BaiduMap/MapPointAnnotion.m
 80 
 81 #編譯 ----------------------------service-----------------------------
 82 service_FILES += service/service.mm
 83 service_FILES += Tweak.xm
 84 
 85 
 86 #連接單元
 87 #
 88 #連接 ----------------------------framework--------------------------
 89 service_FRAMEWORKS = Foundation UIKit QuartzCore Foundation CoreFoundation CoreGraphics  MobileCoreServices
 90 service_FRAMEWORKS += SystemConfiguration  CFNetwork CoreTelephony CoreLocation MapKit
 91 
 92 
 93 #連接 ----------------------------dylib------------------------------
 94 service_LDFLAGS = -lxml2 -lz -licucore -lgcc -lgcc_eh -lstdc++ 
 95 service_LDFLAGS += -L./BaiduMap/inc -R./BaiduMap/inc/ -lbaidumapapi
 96 
 97 #編譯器 ----------------------------------------------------------
 98 #service_CFLAGS += -std=c99 
 99 #service_CFLAGS += -all_load
100 
101 #資源文件 ----------------------------------------------------------
102 internal-package::
103    ifneq ($(wildcard $(RESOURCE_DIR)/*.png), )
104     mkdir -p $(THEOS_STAGING_DIR)/Library/PreferenceLoader/Preferences/$(TWEAK_NAME)
105     cp $(RESOURCE_DIR)/*.png $(THEOS_STAGING_DIR)/Library/PreferenceLoader/Preferences/$(TWEAK_NAME)/
106    endif
107    ifneq ($(wildcard $(RESOURCE_DIR)/*.lproj), )
108     mkdir -p $(THEOS_STAGING_DIR)/Library/PreferenceLoader/Preferences/$(TWEAK_NAME)
109     rsync -avC $(RESOURCE_DIR)/*.lproj $(THEOS_STAGING_DIR)/Library/PreferenceLoader/Preferences/$(TWEAK_NAME)
110    endif
111    ifneq ($(wildcard $(RESOURCE_DIR)/$(TWEAK_NAME).plist), )
112     mkdir -p $(THEOS_STAGING_DIR)/Library/PreferenceLoader/Preferences/$(TWEAK_NAME)
113     cp $(RESOURCE_DIR)/$(TWEAK_NAME).plist $(THEOS_STAGING_DIR)/Library/PreferenceLoader/Preferences/$(TWEAK_NAME)
114    endif
115 
116 include $(THEOS_MAKE_PATH)/tweak.mk

 對這個makefile做一個簡單的解讀:

 1  9~14行屬於系統配置部分:其中11行是調試設備的IP地址
 2  16行是引入常用的一般模板
 3  18行工程名稱
 4  20行存放資源文件的本地目錄名稱:可以自定義 主要是在生成包拷貝時使用
 5  22行是否是調試狀態:常用的一個宏設置是否顯示NSLog 區分是debug還是release 也可以自己嘗試設置其他宏變量
 6  26~83行是編譯所需要的的源文件
 7  88~90行是sdk中的framework
 8  93~95行是需要的一些系統靜態庫和第三方靜態庫
 9  97~99行是編譯器參數設置
10  101~114行是拷貝資源文件
11  116行是引入tweak模板

 

 通過上面的文件我們可以看到,theos的makefile寫法與其他linux/unix環境下的makefile寫法大同小異,多參考一些github上的tweak的makefile寫法,很快就可以掌握技巧。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM