转自https://www.h4ck.org.cn/2013/07/theos-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后面也就是上图中看到的那个样子:

  1. xxx_LDFLAGS = -lz.1.2.5

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

一个makefile模板:

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 41
  42. 42
  43. 43
  44. 44
  45. 45
  46. 46
  47. 47
  48. 48
  49. 49
  50. 50
  51. 51
  52. 52
  53. 53
  54. 54
  55. 55
  56. 56
  57. 57
  58. 58
  59. 59
  60. 60
  61. 61
  62. 62
  63. 63
  64. 64
  65. 65
  66. 66
  67. 67
  68. 68
  69. 69
  70. 70
  71. 71
  72. 72
  73. 73
  74. 74
  75. 75
  76. 76
  77. 77
  78. 78
  79. 79
  80. 80
  81. 81
  82. 82
  83. 83
  84. 84
  85. 85
  86. 86
  87. 87
  88. 88
  89. 89
  90. 90
  91. 91
  92. 92
  93. 93
  94. 94
  95. 95
  96. 96
  97. 97
  98. 98
  99. 99
  100. 100
  101. 101
  102. 102
  103. 103
  104. 104
  105. 105
  106. 106
  107. 107
  108. 108
  109. 109
  110. 110
  111. 111
  112. 112
  113. 113
  114. 114
  115. 115
  116. 116
  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

注释:

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  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模板

参考链接:

https://github.com/DHowett/theos/issues/15

http://www.cnblogs.com/qiezi/archive/2012/09/29/2708726.html

https://github.com/DHowett/theos

原创文章,转载请注明: 转载自 火星信息安全研究院

本文标题: 《theos Makefile》

本文链接地址: https://www.h4ck.org.cn/2013/07/theos-makefile/

THEOS makefile的更多相关文章

  1. theos初探:ios越狱开发教程

    开发环境搭建回顾 现在已经在windows上安装好了theos了.在上一篇中都已经讲了,开发环境主要部件就是: 1.theos,主要包含了使用make时的makefile模板文件.包含了各种库和框架的 ...

  2. theos的makefile写法

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

  3. iOS逆向工程之Theos

    如果你对iOS逆向工程有所了解,那么你对Tweak并不陌生.那么由Tweak我们又会引出Theos, 那么什么是Theos呢,简单一句话,Theos是一个越狱开发工具包,Theos是越狱开发工具的首先 ...

  4. 使用Theos做一个简单的Mobile Substrate Tweak

    01 January 2014 Mobile Substrate和Theos Mobile Substrate是Cydia的作者Jay Freeman (@saurik)的另外一个牛X的作品,也叫Cy ...

  5. theOS环境搭建

    http://joeyio.com/ios/2014/01/01/make-a-mobile-substrate-tweak-using-theos/~/Doucment>: cd mytwea ...

  6. iOS逆向之TheOS

    TheOS 被设计为一个在基于 Unix 平台 (Mac OS X.IOS…) 和大多数 的Linux 平台下开发 iOS 程序的集成开发环境.说是集成开发环境,其实就是给我们准备好了一些代码模板.预 ...

  7. THEOS的第一个TWeak的成功创建

    THEOS的第一个TWeak的成功创建html, body {overflow-x: initial !important;}.CodeMirror { height: auto; } .CodeMi ...

  8. obfuscator-llvm Theos 集成配置

    之前我写过一篇文章是关于在 Xcode 里怎么集成配置 obfuscator-llvmobfuscator-llvm Xcode集成配置 有些情况下我们使用 Theos 开发 tweak,需要将 ob ...

  9. iOS逆向系列-theos

    概述 theos是GitHub开源的一个项目,通过nic.pl创建tweak项目.通过编写我们注入代码,然后执行编译.打包.安装等操作将代码注入iPhone安装的制定程序. theos环境配置 安装签 ...

随机推荐

  1. java的面向对象

    Java是1995年诞生.前身oak,后来改名为java. 面向对象的编程思想:对象是万事万物. 对象是由两部分组成的:属性和方法 1:属性是对象的静态特性(名词) 2:方法是对象的动态特性(动词) ...

  2. (2016春) 作业1:博客和Github简单练习

    0. 博客和Github简单练习 总分:10分 1. 目的 博客使用:注册.发布博客.博客管理练习 Github使用:注册.文件同步等练习 2. 要求 (总体作业要求参考[链接]) 发布一篇博客: 介 ...

  3. PHP疑惑

    <?php $a = array(); $a[0] = 1; $a[1] = 2; $b = (object)$a; var_dump($b); 怎么从对象$b 中取值??? <?php ...

  4. Replace Pioneer 续用2

    软件介绍(摘自百度百科) Replace Pioneer(中文名:替换先锋)是Mind Pioneer出品的一款共享软件.    Replace Pioneer是一款与众不同的专业文本批量替换和处理软 ...

  5. 揭秘Sql2014新特性-tempdb性能提升

    一直以来,在高负载,复杂的生产环境中,tempdb的压力是成为整个实例瓶颈的重要因素之一.微软的工程师们也在各个版本中不断优化它的使用.到了Sql Server2014又有了新的特性使其性能得temp ...

  6. [C#] 與Android共舞–透過GET方式傳資料給Server(含解決中文編碼問題) (转帖)

    上一篇文章分享了透過POST 方式傳資料回Server,這一篇來談談有關於透過GET的方式傳遞 首先,如我預期的一樣,透過網址傳遞,會產生編碼問題,這邊我就順代解掉,希望有碰到的人 可以不用為此煩惱. ...

  7. C#通过反射获取上层调用方法信息

    System.Diagnostics.StackFrame frame = ); System.Reflection.MethodBase method = frame.GetMethod(); st ...

  8. C#设计模式(20)——策略者模式(Stragety Pattern)

    一.引言 前面主题介绍的状态模式是对某个对象状态的抽象,而本文要介绍的策略模式也就是对策略进行抽象,策略的意思就是方法,所以也就是对方法的抽象,下面具体分享下我对策略模式的理解. 二.策略者模式介绍 ...

  9. Windows上成功编译CoreCLR源代码

    昨天得知微软在GitHub上发布CoreCLR的源代码之后,立马从GitHub上签出代码,并尝试在Windows Server 2012上进行编译. 参考CoreCLR的开发者指南(Developer ...

  10. [C++] socket - 1 [简单TCP通信C\S代码]

    服务端: #include<iostream> #include<winsock2.h> #include<stdio.h> #pragma comment(lib ...