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后面也就是上图中看到的那个样子:
详细信息可以参考这个页面:https://github.com/DHowett/theos/issues/15
一个makefile模板:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
|
#
# 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
|
注释:
1
2
3
4
5
6
7
8
9
10
11
|
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
- Makefile之写demo时的通用Makefile写法
Makefile之写demo时的通用Makefile写法[日期:2013-05-22] 来源:CSDN 作者:gqb666 [字体:大 中 小] 前面的一篇文章Makefile之大型工程项目子目录M ...
- 大型工程多个目录下的Makefile写法
1.前言 目前从事于linux下程序开发,涉及到多个文件,多个目录,这时候编译文件的任务量比较大,需要写Makefile.关于Makefile的详细内容可以参考网上流传非常广泛的<跟我一起写Ma ...
- 【APUE】Chapter16 Network IPC: Sockets & makefile写法学习
16.1 Introduction Chapter15讲的是同一个machine之间不同进程的通信,这一章内容是不同machine之间通过network通信,切入点是socket. 16.2 Sock ...
- linux下通用Makefile写法
linux编译多个源文件的程序比较麻烦,这下就需要通用的Makefile了,编译的时候执行一下make命令就OK,下面介绍通用makfile的写法. 假设现在有以下源文件:file1.h file1. ...
- gcc编译, gdb调试, makefile写法
//test.c: #include <stdio.h> int main(void) { printf("hello world!"); return 0; } == ...
- 转来的 cuda makefile 写法学习
原文作者:FreeAquar 原文出处:http://www.cnblogs.com/FreeAquar/ 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给 ...
- Makefile写法
概述 -- 什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员,makef ...
- 常见makefile写法
原文地址:blog.csdn.net/ghostyu/article/details/7755177 1.目标名称,摆脱手动设置目标名称 TARGET = $(notdir $(CURDIR)) al ...
- [Makefile]多目录Makefile写法
最近需要写一个测试程序,这个测试程序需要集成一些功能,写在同一个文件看上去很不好,多个文件的Makefile又不是很熟,于是分享下面这篇文章 先介绍下,调试Makefile时,想知道某个变量的值,怎么 ...
随机推荐
- hdu 1800 Flying to the Mars(简单模拟,string,字符串)
题目 又来了string的基本用法 //less than 30 digits //等级长度甚至是超过了int64,所以要用字符串来模拟,然后注意去掉前导零 //最多重复的个数就是答案 //关于str ...
- DOS永久设置系统环境变量-WMIC
wmic Windows Management Instrumentation Command-line(Windows管理规范命令行) WMIC扩展WMI(Windows Management In ...
- (转)STL中set的用法
转载自here 1.关于set map容器是键-值对的集合,好比以人名为键的地址和电话号码.相反地,set容器只是单纯的键的集合.例如,某公司可能定义了一个名为bad_checks的set容器,用于记 ...
- <Win32_1>深入浅出windows消息机制[转自crocodile_]
上学期学习了Java ,感觉Java写一个窗口真心简单,很易上手,也就难怪很多开发人员选择Java作为自己的开发编程语言.但是由于自身对windows的热爱,让我觉得c.c++语言才是我亲睐的编程语言 ...
- 15条规则解析JavaScript对象布局(__proto__、prototype、constructor)
大家都说JavaScript的属性多,记不过来,各种结构复杂不易了解.确实JS是一门入门快提高难的语言,但是也有其他办法可以辅助记忆.下面就来讨论一下JS的一大难点-对象布局,究竟设计JS这门语言的人 ...
- 重温《js权威指南》 第2-3章
第二章 语法结构 2.1 js区分大小写,html不区分大小写 2.5 注意分号,如果没有分号,解释器会试图解析js,并在不能解析的地方加分号 第三章 值和变量 ...
- C语言,一个彩票摇奖程序摇出22选5的中奖号码
摇奖机摇奖,无非就是利用它的随机性,让球从摇奖机中随机地掉出,就成了中奖号码.而C语言中也同样有个rand()函数可以产生随机数,利用这个rand()函数产生的随机数,同样可以代替从摇奖机中随机摇出的 ...
- 扩展 delphi 泛型 以实现类似lambda功能 , C#中的any count first last 等扩展方法
扩展 delphi 泛型 以实现类似lambda功能 , C#中的any count first last 等扩展方法 在C#中对泛型的扩展,输入参数是泛型本身的内容,返回值则是bool.基于这一点, ...
- JVM垃圾回收机制总结(6) :透视Java的GC特性
1. 使用 System.gc() 可以不管JVM使用的是哪一种垃圾回收的算法,都可以请求 Java的垃圾回收. 在命令行中有一个参数-verbosegc可以查看Java使用的堆内存的情况,它的格式: ...
- CentOS如何开启ssh远程连接
假设VPS采用centos,再假设用较新版本6.5. VPS上可能没有安装桌面,但一般来说都会安装ssh,并且防火墙默认开放22端口. 那就从ssh开始. # 安装ssh,默认已安装好 # yum i ...