Makefile的使用教程:Makefile的规则、部署脚本、config管理ssh连接

原创
2021/09/11 00:00
阅读数 948

前言

make是一个命令工具,是一个解释makefile中指令的命令工具。其本质是文件依赖,Makefile文件制定编译和链接所涉及的文件、框架、库等信息,将整个过程自动化。一般来说,大多数的IDE都有这个命令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。

例子:使用别名配置IP

I、基础知识点

make命令执行时,需要一个 Makefile 文件,以告诉make命令需要怎么样的去编译和链接程序。那么先来了解下什么是编译?

  1. 编译: 把源文件编译成中间代码文件,在Windows下也就是 .obj 文件,UNIX下是 .o 文件,即 Object File,这个动作叫做编译。
  2. 链接: 把大量的Object File合成执行文件

源文件首先会生成中间目标文件,再由中间目标文件生成执行文件。

每个源文件都应该对应于一个中间目标文件(OBJ文件)

1.1 编译

在编译时,编译器只检测程序语法,和函数、变量是否被声明。如果函数未被声明,编译器会给出一个警告,但可以生成Object File。

只有所有的语法正确,编译器才可以编译出中间目标文件。至于函数与变量的声明的正确,就是指头文件的所在位置。

1.2 链接

主要是链接函数和全局变量,所以可以使用这些中间目标文件来链接我们的应用程序。

在链接程序时,链接器会在所有的Object File中找寻函数的实现,如果找不到,那到就会报链接错误码(Linker Error)。

II Makefile的规则

    target... : prerequisites ...
          command
          ...
          ...
         -------------------------------------------------------------------------------
  • 例子

THEOS_DEVICE_IP=iphone #5C9 #配置IP的host 别名
TARGET = iphone:latest:8.0
ARCHS = armv7 arm64
THEOS=/opt/theos
THEOS_MAKE_PATH=$(THEOS)/makefiles
include $(THEOS)/makefiles/common.mk

TWEAK_NAME =
Taoke_FILES = Taoke.xm 

Taoke_FRAMEWORKS = UIKit, Foundation, Security, IOKit, JavaScriptCore

include $(THEOS_MAKE_PATH)/tweak.mk

after-install::
 install.exec "echo '' > /var/log/syslog"
 install.exec "killall -9 WeChat"
    install.exec "killall -9 Moon"

  • target也就是一个目标文件,可以是Object File ,也可以是执行文件。还可以是一个标签(Label),对于标签这种特性,在后续的“伪目标”章节中会有叙述。
  • prerequisites就是要生成那个target所需要的文件或是目标
  • command也就是make需要执行的Shell命令
  •   make clean 清除所有的目标文件,以便重编译。

一个简单的例子

ARCHS = armv7 arm64
TARGET = iphone:latest:7.0

include theos/makefiles/common.mk

TWEAK_NAME = iOSREProject
iOSREProject_FILES = Tweak.mk
iOSREProject_PRIVATE_FRAMEWORK = BaseBoard
incluce $(THEOS_MAKE_PATH)/tweak.mk

after-install:: install.exec "killall -9 SpringBoard"

注意:BaseBoard这个private framework只存在于8.0以上的版本的SDK中,在IOS7 里并没有,所以这个tweak在IOS 7 中因为不会找到framework 而无法进行工作。这种情况可以通过弱引用( “makefile weak linking”)或dlopen()、dlsym() 和 dlclose()系列函数动态调用private framework来解决。

  • 链接Match-o对象(Match-O object)

Theos 采用GUN Linker来链接Mach-O对象,包括.dylib、 .a 和 .o 。例如,要链接libsqlite3.0.dylib 、libz.dylib 和dylib1.0像下面这样写就OK

iOSREProject_LDFLAGS = -lz -lsqlite3.0 -dylib1.o 

  • 开启arc: 不用自己手动进行内存管理
$(TWEAK_NAME)_CFLAGS += -fobjc-arc

  • 单独为单个文件指定mrc
ZKSwizzle/ZKSwizzle.m_CFLAGS = -fno-objc-arc

III 集成第三方库

3.1 编译参数指定一些编译链接参数、搜索路径

TweakDemo_CFLAGS = -fobjc-arc -Wno-int-to-void-pointer-cast -Wno-int-to-pointer-cast -I./BookLib/include -F./BookFramework # 指定头文件位置
ZKSwizzle/ZKSwizzle.m_CFLAGS = -fno-objc-arc # 设置单个文件的MRC
TweakDemo_LDFLAGS = -L./BookLib -F./BookFramework # 链接
TweakDemo_LIBRARIES = BookLib #.a
TweakDemo_FRAMEWORKS = BookFramework # framke

  • 导入头文件直接调用
// 这个第三方库或者头文件也可以放到 /opt/theos/对应的目录
#import <BookLib/BookLib.h> //.a
#import <BookFramework/BookFramework.h>// framework

3.2 使用 ASIHTTPRequest 的例子

请从公众号的原文链接查看此部分

IV deploy 部署脚本

#!/bin/sh
cd `dirname $0
make clean
make package install

scp ./taoke.lua iphone:/private/var/mobile/Media/TouchSprite/lua/#配置IP的host 别名

rm -f ./debs/*
exit 0

4.1 layout的应用

应用场景:新增图片、文件等资源文件,或者二进制可执行文件;然后在代码中调用使用它们。这个时候可以使用layout目录指定文件到特定的路径。

  • 获取文件的代码如下
 NSString* resourcePath = @"/Library/Application Support/TweakDemo/";
 NSDictionary* resourceDict = [[NSDictionary alloc] initWithContentsOfFile:[resourcePath stringByAppendingPathComponent:@"resource.plist"]];
 NSLog(@"resourceDict:%@", resourceDict);

4.2 使用ssh config配置文件来管理ssh连接

config 文件:设置IP

https://blog.csdn.net/z929118967/article/details/78219687

# Private 192.168.2
Host iphone
HostName  192.168.2.131
User root 
IdentityFile ~/.ssh/id_rsa_Theos125

# Private github
Host github.com
HostName  github.com
User git
IdentityFile ~/.ssh/id_rsa

一个SSH的认证文件可以重复使用到不同的host

devzkndeMacBook-Pro:.ssh devzkn$  ssh-copy-id -i id_rsa_Theos125.pub root@192.168.2.150

V 总结

请从公众号的原文链接查看此部分

see also

【how_to_host_cydia_repo】 批量部署Tweak插件到iOS设备的方案

https://kunnan.blog.csdn.net/article/details/78344104


本文分享自微信公众号 - iOS逆向(code4ios)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
0 评论
0 收藏
0
分享
返回顶部
顶部