最近为了给xmake实现预编译头文件的支持,研究了下各大主流编译器处理预编译头的机制以及之间的一些差异。
现在的大部分c/c++编译器都是支持预编译头的,例如:gcc,clang,msvc等,用于优化c++代码的编译速度,毕竟c++的头文件如果包含了模板定义的话,编译速度是很慢的,
如果能够吧大部分通用的头文件放置在一个header.h中,在其他源码编译之前预先对其进行编译,之后的代码都能重用这部分预编译头,就可以极大程度上减少频繁的头文件冗余编译。
但是不同编译器对它的支持力度和处理方式,还是有很大差异的,并不是非常通用,在xmake中封装成统一的接口和使用方式,还是费了很大的功夫才搞定。
msvc的预编译头处理
预编译头
继续阅读 »
为了进一步裁剪tbox,更好的适配嵌入式开发平台,tbox新增了--micro=y的微模块编译选项
如果启用此编译选项,那么只会编译tbox里面较轻量的一些模块,是的编译后的库大小,尽量保证在64K左右。
先来讲讲一些跟库大小相关的编译选项:
* `--smallest=y`: 通用平台,最小编译模式,会禁用所有第三方依赖库,禁用所有扩展模块,启用最小化编译优化(库内部也会尽可能节省内存使用)
* `--micro=y`: 专门针对嵌入式平台设计,仅编译最为轻量的一些模块,启用最小化编译优化(有可能会包含一些可选组件)
smallest和micro的区别在于,即使启用了smallest禁用所有扩展模块,但是还是会内置比m
继续阅读 »
主页
源码
更新内容
新特性
增加头文件依赖自动检测和增量编译,提高编译速度
在终端中进行颜色高亮提示
添加调试器支持,xmake run -d program ...
改进
增强运行shell的系列接口
更新luajit到v2.0.4版本
改进makefile生成插件,移除对xmake的依赖,并且支持windows/linux/macosx等大部分pc平台
优化多任务编译速度,在windows下编译提升较为明显
Bugs修复
修复安装目录错误问题
修复import根目录错误问题
修复在多版本vs同时存在的情况下,检测vs环境失败问题
继续阅读 »
最近有很多用户反馈xmake在windows上编译体验不是很好,不方便进行调试和开发。。
其实xmake的定位主要还是以直接编译为主,提供跨平台的编译和部署,不依赖第三方IDE工程,不过目前确实在windows的体验还不是很好
尽管我已经优化了在windows下的编译速度,并且提供了xmake run -d xxxx方式,直接加载调试器进行源码调试
但是毕竟整体开发上,没有IDE的支持,对于习惯IDE开发的用户来讲,就不是那么友好了。(虽然我个人觉得用编辑器+printf的方式已经够用了)
因此我下一步计划(原本打算先做好包管理的),打算优先开始支持对Visual Stdio工程文件的生成,到时候会通过project插件的方
继续阅读 »
新特性
为解释器作用域增加一些内建模块支持
针对windows x64平台,支持ml64汇编器
改进
增强ipairs和pairs接口,支持过滤器模式,简化脚本代码
为vs201x工程生成增加文件filter
移除core/tools目录以及msys工具链,在windows上使用xmake自编译core源码进行安装,优化xmake源码磁盘空间
移除xmake/packages,默认模板安装不再内置二进制packages,暂时需要手动放置,以后再做成自动包依赖下载编译
Bugs修复
修复msvc的编译选项不支持问题:-def:xxx.def
修复ml.exe汇编器脚本
修复选项链接顺序问题
继续阅读 »
上一篇文章简单介绍了 Source Map,接下来我们来看看如何利用各种工具来生成 Source Map。
什么是 Source Map?
Source Map 提供了一个与语言无关的方式,来将生产环境中的代码映射回开发环境中的原始代码。
在现代的开发流程中,我们的开发环境和实际线上环境的代码通常都不一样。在应用上线部署前,我们通常都要对我们的代码进行编译、合并、压缩或者其他方面的优化,这使得我们非常困难来准确定位会原始代码。但是,在生成过程中,Source Map 文件储存了这些位置信息,因此,当我们查找一行中的某个位置时,Source Map 文件可以准确定位到原始文件中的位置。这使得我们线上环境中的代码变得可读,甚至可调
继续阅读 »
为了进一步提升构建效率,减少没必要的重建,xmake新增了对头文件的依赖检测,以及自动构建仅仅需要重新编译的源文件,提升编译速度,并且完全支持windows、linux、macosx等大部分平台。。
由于检测过程本身也会有一些性能损耗,因此xmake对此进行了深度优化,实现极速依赖检测:
对依赖头文件进行过滤,如果是系统头文件,非自身项目的第三方头文件,自动忽略,这些头文件基本上不会再开发项目的时候,经常变动,所以没必要去每次检测他们,如果真有变动,手动重建下就行了
针对每个头文件的检测结果进行缓存,直接应用到下一个源文件上,减少重复检测的次数
其他一些细节优化
继续阅读 »
新特性
支持make进行直接编译(会去自动下载xmake进行构建)
在平台库中,添加切换context上下文接口(参考boost.context实现原理进行重写,并对部分架构进行优化)
新增跨平台协程模块(支持i386, x86_64, arm, arm64),提供更加易用的高性能并发编程模式
新增基于协程的各种服务器开发实例(包括:简单轻量的http服务器,爬虫。。)
新增poller轮询器接口,实现对epoll, poll, kqueue, select的封装,逐步取代老的aiop接口
新增mbedtls ssl库接口支持,目前已支持:openssl, polarssl, mbedtls
tbox所有stream, socke
继续阅读 »
当前是有些工具比如apktool,dextojar等是可以对我们android安装包进行反编译,获得源码的。为了减少被别人破解,导致源码泄露,程序被别人盗取代码,等等。我们需要对代码进行混淆,android的sdk中为我们提供了ProGrard这个工具,可以对代码进行混淆(一般是用无意义的名字来重命名),以及去除没有使用到的代码,对程序进行优化和压缩,这样可以增加你想的难度。最近我做的项目,是我去配置的混淆配置,因此研究了一下,这里分享一下。
如何启用ProGuard
ant项目和eclipse项目启用方法
在项目的project.properties文件中添加一下代码
proguard.config=prog
继续阅读 »