[allmake] -- 交叉编译原来如此简单
2015-12-20 12:06
253 查看
[allmake] -- 交叉编译原来如此简单
原创文章,转载请注明出处:http://www.cnblogs.com/johnd/p/5060530.html前言:做嵌入式开发的攻城狮朋友们,也许你要做个应用,也许你要做驱动,也许你要移植第三方库或应用,交叉编译是少不了的如。如果你是菜鸟,从不会写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目录下面。[code] * 跨平台编译第三方源代码 一般来说,第三方库都写好了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[/code]
1. 以移植zlib到arm平台为例,首先添加你要的平台配置,和上面讲的平台配置一样,只需指定关键字就可以了,
allmake add plat=brcm exports='cc ar' cwdallmake configureallmake clean all install总结: allmake我通过十几年c/c++的使用建议所浓缩的一些精华,它更重要的是一种编程思想,注重软件的模块化,我可以很简单的开启一个新的项目,也许就是一个独立的模块,它可以用在不同的应用软件上面,而应用也很方便的添加这个依赖。 allmake本身是一个开源的跨平台开发工具,具有一定的约定俗成规则,方便建立和管理你的项目的工具,你可以到github下载并通过简单的帮助文档就可以实现很强大的功能,这片文章就先介绍到这里,如果各位有需要,后续我会再写更详细的教程。 想了解更多详情,请访问 https://github.com/allmake/allmake
相关文章推荐
- 提升Python程序运行效率的6个方法
- cocos2dx 交叉编译 iconv库 protobuf库
- Android 内核源代码交叉编译
- Android内核源码交叉编译
- ARM Linux 交叉编译 工具链 制作攻略
- Ubuntu11.04中搭建交叉编译环境(arm-linux-gcc-4.6.1版本)
- 倒腾路由器
- 新手刚接触linux+arm,交叉编译环境的搭建。
- linux下avr-gcc编译环境搭建
- arm-linux-系列工具,ld,ar,as,objcopy
- Chromium交叉编译日志
- CrossCompiler And Auto tools
- Build Library By xcodebuild
- 编译Rust for arm
- 使用Rust交叉编译arm程序
- Qt编译环境的搭建
- 下载编译android kernel
- ubuntu14.01 搭建交叉编译环境arm-linux-gcc 4.3.2
- Fedora21安装RTEMS4.11编译环境(补充)
- Qt4.7.2的移植