恩。。nixyx确实算不上是一个构建系统。
所谓构建系统,比如GNU的Autotools,那是一套很完整的构建体系,包括了程序的配置,编译和安装三大部分。
类似的软件还有:google的gyp、腾讯的Blade等。
它们最大的好处在于,可以不考虑平台之间的差别,使用统一的配置文件和命令,做到跨平台部署。
它们往往还支持很多很高端的功能,比如集成自动测试,代码检查(Blade)。。
可是我暂时不需要这些复杂的功能。
我正在编写的nixy库是一个跨平台/编译器的C++库,它非常小,没必要使用大型的(或者说有学习成本和使用成本的)构建系统。目前的所谓构建,也只是编译一下测试代码。
而跨平台的编译确实又是一个很搞人的事情,windows下最起码得支持各种Visual C++版本,还有mingw也得考虑进来;linux下相对单纯些,写一个makefile基本一劳永逸了。。但arm下的linux,makefile又会有些区别。
这么多的项目工程文件(包括各种不同的makefile),随着项目的长大管理复杂度直线上升=.=
我的需求:
一个可以根据配置文件(js,简单易用,基本无学习成本)生成各种平台/编译器下的项目工程/编译文件的工具。
所以就花了两天折腾出来了一个很小的“构建系统”。。其实不算吧,应该叫“项目工程/编译文件生成器”才对。
/* 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'" }
Script File: build.js Target Plat: win Target CC: vc11 OK to start it ? (y/n/f/p/c)
更多内容请访问:http://darkc.at