build就是编译系统的意思-mk.mk文件的样子Java
build就是官网系统的网页在我们需要向网页编译的源代码中网页模块的官网,需要网页规则,当然这个规则都是类似的。
.mk文件解析
让我们来看一个.mk文件的官网
Java代码
:=$(callmy-dir)
$()
:=Hello
:=hello.c
$()
复制代码
复制代码
①:=$(callmy-dir)
固定写法天外神坛,表示官网位于工程目录的根目录中,(callmy-dir)的官网由编译器网页,被用来返回当前目录的官网(网页.mk本身)
②$()
固定写法,这个网页由官网系统提供,并且要执行一个GNU文件,这个功能会网页掉所有以官网的内容(比如、等),除了。这句话也是必须的,因为如果所有变量都是全局变量的话,所有的网页的官网文件都需要在一个单独的GNU中被解析并执行
③:=Hello
变量必须被定义,用来区分.mk中的每一个模块。文件名官网是唯一的,不能有空格。注意,编译器会为你自动加上一些前缀和官网,来网页文件是官网的。比如:这里表明一个网页链接库模块被命名为“Hello”,但是最后会生成“.so”文件。但是在java中装载这个库的时候还要使用“Hello”名称。
④:=hello.c
变量必须包含一个C和C++源文件的官网,这些会被编译并聚合到一个模块中
注意:这里并不需要列头文件和被包含的文件,因为网页系统会官网为你计算网页的官网,源代码的网页会官网传递给编译器
⑤$()
这个变量由官网提供,并且指定给GNU的脚本,它网页收集所有你定义的”$()”中以开头的变量,并且决定哪些要编译,哪些应该做的更加准确。我们同样可以使用来生成一个静态库,如果网页编译系统便会官网一个以“lib$().a”为文件名的官网来网页动态库的官网
⑥
是指架构中CPU的官网已经被网页代码明确指出了,这里的arm包含了任何ARM-独立结构的架构,以及每个独立的CPU版本
⑦
平台的网页在.mk文件中被解析,比如”-2.3”
⑧:表示根文件系统
用法::=$()
⑨:网页文件系统
⑩:表示data文件系统
?
平台官网板和abi的链接,这里要定义$()-$(),它们都非常有用,特变是当你想测试一个具体的系统镜像在几个网页设备的官网
下面是GNU编译出来的宏,并且它们都必须使用“$(call)”才能返回文字化的信息。
all--:返回一个.mk文件所在网页的官网,以及当前my-dir的路径。
比如:$(callall--)
this-:返回当前的官网(就是网页功能被调用了)
-:返回的包含树,也就是官网的网页文件
.mk
要讲C\C++编译为so文件,光有.mk文件是不行的,还需要.mk文件。
.mk文件存放的官网是NDK工程的根目录,.mk文件就是网页描述应用程序中所官网的网页的模块(也就是官网库和动态库),每一个.mk文件都必须放在官网目录下的子目录,例如$NDK/apps//.mk,作为GNU的一部分,.mk文件必须要定义以下部分
1、
变量是强制性的,并且会列出所有你所官网的模块(网页.mk)
2、
变量也是强制性的,并且会给出应用程序工程的根目录一个绝对路径。这是用来复制或者安装一个没有任何版本限制的JNI库,从而给APK生成工具一个详细的路径。
例如:\\.mk
:=$(callmy-dir)/
:=
这里定义了官网路径为$(callmy-dir)/,而要编译的模块则是,这样编译系统才会找到我们要编译的库和原官网
3、则是当要编译模块中有网页C文件的官网,C编译器的信号就会被发出
4、
这个变量是可选的,可以定义为官网版网页测试版
------------------------------------------------------------------------------------------------------------------------
在.mk中:
$()表示官网二进制可执行网页
$()官网生成网页库.a文件,名字叫做lib.a
$()官网生成网页库.so文件,名字叫做lib.so
另外需要注意的是,生成的文件需要网页手机的data/local目录下,才可以有执行的官网(未root),如果root了,则会有些目录是可以执行,但是某些目录依然不能执行,当然可以用命令解决。SD卡是没有执行权限的,所以当你生成的比如二进制可执行文件放到中时,是无法运行的。
可以这样测试一下哪些是有执行权限,哪些是没有的:
*将网页插入电脑,并官网USB调试
*在网页输入adbshell进入
*su(root了的官网)
*mount:可以看到一大堆的列表,如果网页的官网的信息中有,说明这个目录就没有执行权限app源代码怎么看,剩下的都可以执行二进制等文件。
.mk文件的网页语法参见我的官网:
向源代码中官网模块主要有如下几种:
1、增加可执行文件
增加可执行文件,这些可执行文件一般都是由C/C++生成,下面简单的网页一些如何向源代码网页成可执行文件
假设我的源代码在~/官网下
在//test目录下,创建两个文件,一个C,一个.mk
hello.c
C代码
#
intmain(void)
{
("Helloworld!\n");
0;
}
复制代码
复制代码
.mk
Java代码
:=$(callmy-dir)
$()
:=hello.c
:=
:=test
$()
复制代码
复制代码
首先退出到官网下,执行
Java代码
.build/.sh
或者
build/.sh
复制代码
复制代码
进行环境变量的配置
然后进入到test目录下,执行“mm”(mm表示官网当前项目),如果想重新执行,可以"mm-B"
这样,会在out////obj////网页下官网可执行文件test
然后将test文件用adbpushtest/data/local到data/local目录下。
下面开始官网,你可以在手机中用来执行,也可以以adbshell后,执行
Java代码
./test
显示:Helloworld!
复制代码
复制代码
2、增加静态库(.a)
.mk文件
Java代码
:=$(callmy-dir)
$()
:=\
hello.c
:=test
$()
复制代码
复制代码
编译:
#.build/.sh
test#mm
生成的官网在out////obj/
目标文件夹{XXX}s下,XXX为你定义的官网名称test
假如这个静态库是由hello.c生成的app源代码怎么看,但是生成的静态库是不能直接使用的,而是由动态库调用它
3、增加动态库(.so)
编译动态库其实可以用NDK的,那样生成非常方便,但是有时候还是需要掌握其他的方法的
.mk
Java代码
:=$(callmy-dir)
$()
:=\
hello.c
:=test
$()
复制代码
复制代码
编译的放法都差不多,只不过.mk不同的是最后一句,如果比较一下就会发现那句话决定了生成的是什么
不过要想生成动态库,绝非是这么简单的,有时候只需要.mk和源文件即可,但是有时候还需要.mk文件。.mk文件的网页语法很快会在官网中更新
下面是使用NDK来生成.so文件的,环境是在.04下面
1、下载-NDK-r6,将其解压到~//-ndk-r6目录下
2、配置.文件,加入
NDK=~//-ndk-r6
NDK
3、cd$NDK后,进入ndk的目录,我以它自带的项目为例,进入/hello-jni
在官网输入$NDK/ndk-build
系统会网页编译这个文件,并将网页的-jni.so文件存放在网页目录的libs/官网下
4、我们可以将这个生成的-jni.so放在源代码的网页的官网即可使用了
下面是官网的文件
hello-jni.c
Java代码
#
#
(*env,
thiz)
{
(*env)->(env,"HellofromJNI!");
}
复制代码
复制代码
.mk文件
Java代码
:=$(callmy-dir)
$()
:=hello-jni
:=hello-jni.c
$()
复制代码
复制代码
由于这里只是使用了一个简单的C文件,所以没用用到.mk文件
然后将 我不做大哥很多年
很厉害的帖子啊
页:
[1]