nixyx —— 一个小巧的项目工程/编译文件生成器(构建系统?)
2013-11-30 15:10
621 查看
恩。。nixyx确实算不上是一个构建系统。
所谓构建系统,比如GNU的Autotools,那是一套很完整的构建体系,包括了程序的配置,编译和安装三大部分。
类似的软件还有:google的gyp、腾讯的Blade等。
它们最大的好处在于,可以不考虑平台之间的差别,使用统一的配置文件和命令,做到跨平台部署。
它们往往还支持很多很高端的功能,比如集成自动测试,代码检查(Blade)。。
可是我暂时不需要这些复杂的功能。
我正在编写的nixy库是一个跨平台/编译器的C++库,它非常小,没必要使用大型的(或者说有学习成本和使用成本的)构建系统。目前的所谓构建,也只是编译一下测试代码。
而跨平台的编译确实又是一个很搞人的事情,windows下最起码得支持各种Visual C++版本,还有mingw也得考虑进来;linux下相对单纯些,写一个makefile基本一劳永逸了。。但arm下的linux,makefile又会有些区别。
这么多的项目工程文件(包括各种不同的makefile),随着项目的长大管理复杂度直线上升=.=
我的需求:
一个可以根据配置文件(js,简单易用,基本无学习成本)生成各种平台/编译器下的项目工程/编译文件的工具。
所以就花了两天折腾出来了一个很小的“构建系统”。。其实不算吧,应该叫“项目工程/编译文件生成器”才对。
根据脚本文件自动生成项目工程/编译文件。目前支持:linux/win下的makefile、Visual Studio的sln(Format Version 9.00 以上)
脚本可以使用ini和js,其中ini不支持条件判断和循环(当然了,这货只是个ini),仅用于最简单的情况
恩,就这些了,我暂时只需要它帮我生成项目文件。
先来看一段简单的js脚本,文件名为build.js,放在nixyx目录下即可:
上面这个脚本就是目前我构建时使用的脚本。
Solution对象
是整个工程对象;
Projects对象 是工程下的项目集合;
$(Configuration) 会根据编译的选择自动替换为debug或release;
$(CC) 表示当前编译器的名字,在nixyx运行时会列出当前选择的编译器。
脚本功能基本就是上面这些,当运行nixyx的时候,在控制台界面上会显示出如下文字:
y/n/f/p/c 的含义是:
y:yes,开始生成相关平台的工程文件
n:no,以空格为分隔,一次性输入所有可选配置(配置脚本的完整文件路径 操作系统 编译器)
f:file,键入f之后nixyx会提示重新输入文件的完整路径(当然,支持相对路径的文件)
p:platform,即目标平台。目前支持win(包括win32/win64/wince)和linux
c:compiler,即编译器。目前支持的有:vc8-11(即vs2005-2012)、gcc
以上,功能很简单。
exe:http://nixy.googlecode.com/svn/trunk/build/
如果想要编译的话,代码在这里:http://nixy.googlecode.com/svn/trunk/nixyx/
因为目前nixyx是使用Qt 5.1.1编写的,所以编译的话需要先安装Qt。。
这个稍微有点麻烦,不过Qt本身就是跨平台的,保证了nixyx可以在多个平台上编译。
更多内容请访问:http://darkc.at
所谓构建系统,比如GNU的Autotools,那是一套很完整的构建体系,包括了程序的配置,编译和安装三大部分。
类似的软件还有:google的gyp、腾讯的Blade等。
它们最大的好处在于,可以不考虑平台之间的差别,使用统一的配置文件和命令,做到跨平台部署。
它们往往还支持很多很高端的功能,比如集成自动测试,代码检查(Blade)。。
可是我暂时不需要这些复杂的功能。
我正在编写的nixy库是一个跨平台/编译器的C++库,它非常小,没必要使用大型的(或者说有学习成本和使用成本的)构建系统。目前的所谓构建,也只是编译一下测试代码。
而跨平台的编译确实又是一个很搞人的事情,windows下最起码得支持各种Visual C++版本,还有mingw也得考虑进来;linux下相对单纯些,写一个makefile基本一劳永逸了。。但arm下的linux,makefile又会有些区别。
这么多的项目工程文件(包括各种不同的makefile),随着项目的长大管理复杂度直线上升=.=
我的需求:
一个可以根据配置文件(js,简单易用,基本无学习成本)生成各种平台/编译器下的项目工程/编译文件的工具。
所以就花了两天折腾出来了一个很小的“构建系统”。。其实不算吧,应该叫“项目工程/编译文件生成器”才对。
1. nixyx解决的问题
根据脚本文件自动生成项目工程/编译文件。目前支持:linux/win下的makefile、Visual Studio的sln(Format Version 9.00 以上)脚本可以使用ini和js,其中ini不支持条件判断和循环(当然了,这货只是个ini),仅用于最简单的情况
恩,就这些了,我暂时只需要它帮我生成项目文件。
2. nixyx的使用方法
先来看一段简单的js脚本,文件名为build.js,放在nixyx目录下即可:/* Solution settings */ Solution.name = "nixy" Solution.project_path = "../" Solution.include_path = "'nixycore'" Solution.tmp_path = "!tmp/$(Configuration)/$(CC)" Solution.out_path = "!bin/$(Configuration)/$(CC)" if (Make.PLAT == "win") { Solution.CFLAGS = "-pipe -frtti -Wall -Wextra -fexceptions -march=nocona" Solution.LFLAGS = "-Wl,-s -Wl,-subsystem,console -mthreads" } else { Solution.CFLAGS = "-pipe -frtti -Wall -Wextra -fexceptions -march=nocona" Solution.LFLAGS = "-Wl,-s" } /* Projects settings */ /* project nixycore */ { var prj = Projects.create("nixycore") prj.type = "lib" prj.heads = "\ 'nixycore/al/typemanip/nx_friend_class.hxx' \ /* 中间省略若干行 */ 'nixycore/thread/threadmodel.h' \ 'nixycore/thread/thread.h'" if (Make.PLAT == "win") { prj.sources = 'nixycore/al/thread/tlsptr_win.cpp' } } /* project test */ { var prj = Projects.create("codecheck") prj.type = "console" if (Make.PLAT == "linux") { prj.libs = "-lpthread -lrt" } else if (Make.PLAT == "win") { prj.depends = 'nixycore' } prj.heads = "\ 'codecheck/test_head.h' \ 'codecheck/test_preprocessor.h' \ 'codecheck/test_typemanip.h' \ 'codecheck/test_algorithm.h' \ 'codecheck/test_utility.h' \ 'codecheck/test_time.h' \ 'codecheck/test_delegate.h' \ 'codecheck/test_finalizer.h' \ 'codecheck/test_thread.h' \ 'codecheck/test_memory.h'" prj.sources = "\ 'codecheck/main.cpp' \ 'codecheck/dummy.cpp'" }
上面这个脚本就是目前我构建时使用的脚本。
Solution对象
是整个工程对象;
Projects对象 是工程下的项目集合;
$(Configuration) 会根据编译的选择自动替换为debug或release;
$(CC) 表示当前编译器的名字,在nixyx运行时会列出当前选择的编译器。
脚本功能基本就是上面这些,当运行nixyx的时候,在控制台界面上会显示出如下文字:
Script File: build.js Target Plat: win Target CC: vc11 OK to start it ? (y/n/f/p/c)
y/n/f/p/c 的含义是:
y:yes,开始生成相关平台的工程文件
n:no,以空格为分隔,一次性输入所有可选配置(配置脚本的完整文件路径 操作系统 编译器)
f:file,键入f之后nixyx会提示重新输入文件的完整路径(当然,支持相对路径的文件)
p:platform,即目标平台。目前支持win(包括win32/win64/wince)和linux
c:compiler,即编译器。目前支持的有:vc8-11(即vs2005-2012)、gcc
以上,功能很简单。
3. nixyx下载和编译
exe:http://nixy.googlecode.com/svn/trunk/build/如果想要编译的话,代码在这里:http://nixy.googlecode.com/svn/trunk/nixyx/
因为目前nixyx是使用Qt 5.1.1编写的,所以编译的话需要先安装Qt。。
这个稍微有点麻烦,不过Qt本身就是跨平台的,保证了nixyx可以在多个平台上编译。
更多内容请访问:http://darkc.at
相关文章推荐
- nixyx —— 一个小巧的项目工程/编译文件生成器(构建系统?)
- 如何使用国际开源项目构建一个完整的GIS(地理信息)应用系统
- 构建一个轻量级的嵌入式虚拟平台,开发工程用板stm32 picoc解释器,大量自定义函数,sarm拓展,lwip移植,nes模拟器移植,系统优化,等等技术的融合
- 用mingw编译C++工程;程序里面的cout<<"aaa";cmd运行c++程序,aaa内容在控制台不显示,如何将aaa输出到控制台屏幕并将控制台内容写到一个文件中。
- VC创建一个.h文件加入项目后,重命名为CPP,仍然不编译
- 找到一个大型工程所编译的源文件(跟踪工程编译的文件)
- 整理一个ANT在J2EE项目中的应用,含预编译JSP和打包WAR/EAR文件!
- Android.mk文件语法详述 1. 概述 Android.mk文件是用来描述build system(编译系统)的,更准确的说:该文件是一个微型的GNU Makefile片段,将
- 一个完整的java项目ant编译文件
- 自己编译 tess-two几个库文件用于android OCR开发并合入你的工程项目
- Mac 终端下删除一个工程项目中的所有.svn文件
- Myeclipse中如何做到保存一个文件不要编译整个项目
- 把 VC 工程的编译配置写在一个文件中,并影响 VC 的编译
- 嵌入式Linux-根文件系统2_(利用交叉编译工具链,构建/lib目录)
- 在一个项目中明明引用了某工程, 在引用时也能智能地提示,但编译时却提示没有using引用
- 一个小巧简单的命令可以克隆整个磁盘或者文件系统!
- 吴昊品工程级别软件项目 Round 5 —— 用JavaScript实现一个简单的注册登录系统
- 利用Samba构建一个良好的文件系统【图】
- 如何构建一个ERP系统(需求分析、系统架构、系统设计、系统编码、测试、交付程序及文文件)。
- 如何在Android源码编译系统中添加一个C项目