转载

[allmake] -- 交叉编译原来如此简单

前言:

做嵌入式开发的攻城狮朋友们,也许你要做个应用,也许你要做驱动,也许你要移植第三方库或应用,交叉编译是少不了的如。如果你是菜鸟,从不会写makefile,正好这里介绍一款开发工具,解决你头疼的问题;如果你是大咖,它也是你的得力助手,让你专注你要做的业务,不必去写冗长的makefile,它就是 allmake。

allmake是一跨平台的开发工具,它建立在make之上,非常容易使用。你可以不需要写makefile,allmake会代你操劳,你只需要把你的源代码放到生成好的src目录下面,支持c/c++/asm混合编译,你无需做额外的设置,只需设置你的依赖关系就行了。

allmake也非常方便编译第三方代码,通常我们说的移植,很多文章洋洋洒洒几千字的教程,allmake只需要简简单单的三行命令。

安装环境:

Windows:需要安装 cygwin 或者minsys,我安装的是 minsys2 环境,安装gcc或者下载i686-w64-mingw32 解压至allmake/toolchain下面。

Linux:任何Linux发行版,我使用的是ubuntu 14.04。

Mac:现安装homebrew,然后在命令行下安装gcc,brew install gcc make automake autoconf

安装方法

 git clone https://github.com/allmake/allmake.git cd allmake sudo ./bin/allmake -i 

开始使用

按照以上步骤安装完毕重启电脑后就可以在任何目录下开发c/c++的项目了,比如以ubuntu为例,在$HOME下面创建你的工作目录~/workspace。

首先我们来看如何从零创建一个c/c++的项目

 mkdir -p ~/workspace/demo cd ~/workspace/demo allmake add plat=x86_64-linux (只需执行一次,添加好平台相关配置以后就只用运行下面一行命令就可以了) allmake clean all release bin 

其中 add表示添加配置,plat表示平台platform的缩写,x86_64-linux是ubuntu的平台 x86_64-linux-gnu的名称关键字。你查看安装目录allmake/toolchain/下面有一个目录叫x86_64-linux-gnu,代表我们要寻找的编译器是x86_64-linux-gnu-gcc,如果里面是个空目录,那allmake会使用系统不带前缀的gcc作为编译器, allmake后带了install选项后,所生成的输出文件如头文件、共享库或者可执行二进制文件会安装到allmake/platform/arm-brcm-linux-gnueabi下面,以后你在使用这个库的时候,直接引用头文件就是这样的格式:#include <projectname/headerfile.h>, 以引用demo下面的version.h为例就是 #include <demo/version.h>,而链接依赖就是在添加你的平台时候加入相关选项就是了,如 allmake add plat=x86 COMMON_LIBS='-ldemo', 表示这个项目要依赖libdemo.so 

如果你把 plat=x86_64-linux 换成 plat=brcm,那么就会配置成 arm-brcm-linux-gnueabi的平台,brcm是编译器arm-brcm-linux-gnueabi的一个关键字。

好了,就是这么简单,运行以上两行allmake命令行,就可以生成二进制可执行文件,我们来运行一下

 ./build/x86_64-linux-gnu/obj/demo 

屏幕输出:

demo V1.0.0.151212


你可以用 allmake -h 查看使用方法和各个选项的含义,如option有bin表示输出目标格式是个可执行的二进制文件,否则为共享库;install表示allmake会安装输出目标到allmake安装目录中的platform目录下面。

* 跨平台编译第三方源代码
  
一般来说,第三方库都写好了makefile或者configure,allmake做的就是基于现有做好的配置来做更简单的配置,以方便跨平台的移植工作。

  我们使用得最多的就是为arm linux平台移植的时候,下面以编译器
arm-brcm-linux-gnueabi 为例讲解我们经常要用的的一些第三方库的移植方法,使用allmake也是非常的简单,基本上也就三个命令行搞定。
编译第三方库和编译自己的项目使用基本一样的命令,只是配置稍有不同,其中options是指对于使用automake的项目我们一般会这样去配置:

    ./configure --prefix=/usr/local --host=arm-brcm-linux-gnueabi
--enable-feature1 --with-libx

  那你会问,你的allmake没有什么优势啊,看起来都差不多,其实这里面有学问的,你看我们无须值得--host和--prefix,取而代之的是用 plat=编译器的关键字,简单而方便,allmake会自动的寻找你放置在
allmake/toolchain/下的编译器,而这个配置allmake会一直记住的,以后更新代码只需要重新运行 allmake configure和allmake clean all install就可以了,allmake后带了install选项后,所生成的共享库或者可执行二进制文件会安装到allmake/platform/arm-brcm-linux-gnueabi下面。
  而--exports表示要配置指定编译器 CC=
arm-brcm-linux-gnueabi-gcc,AR=arm-brcm-linux-gnueabi-ar,这根据不同的项目要求而定,大部分automake的项目都需要这个配置,只有一些写的比较简单 makefile会有这个要求。
    allmake add plat=the-keyword-of-compiler-folder-name-under-allmake-toolchain options='--enable-feature1 --with-libx' --exports='cc ar'
    allmake configure
    allmake clean all install
  1. 以移植zlib到arm平台为例,首先添加你要的平台配置,和上面讲的平台配置一样,只需指定关键字就可以了,
 allmake add plat=brcm exports='cc ar' cwd allmake configure allmake clean all install 

总结

allmake 我通过十几年c/c++的使用建议所浓缩的一些精华,它更重要的是一种编程思想,注重软件的模块化,我可以很简单的开启一个新的项目,也许就是一个独立的模块,它可以用在不同的应用软件上面,而应用也很方便的添加这个依赖。

allmake 本身是一个开源的跨平台开发工具,具有一定的约定俗成规则,方便建立和管理你的项目的工具,你可以到github下载并通过简单的帮助文档就可以实现很强大的功能,这片文章就先介绍到这里,如果各位有需要,后续我会再写更详细的教程。

想了解更多详情,请访问 https://github.com/allmake/allmake

正文到此结束
Loading...