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寫法,很快就可以掌握技巧。