最近为了给xmake实现预编译头文件的支持,研究了下各大主流编译器处理预编译头的机制以及之间的一些差异。
现在的大部分c/c++编译器都是支持预编译头的,例如:gcc,clang,msvc等,用于优化c++代码的编译速度,毕竟c++的头文件如果包含了模板定义的话,编译速度是很慢的,
如果能够吧大部分通用的头文件放置在一个header.h中,在其他源码编译之前预先对其进行编译,之后的代码都能重用这部分预编译头,就可以极大程度上减少频繁的头文件冗余编译。
但是不同编译器对它的支持力度和处理方式,还是有很大差异的,并不是非常通用,在xmake中封装成统一的接口和使用方式,还是费了很大的功夫才搞定。
msvc的预编译头处理
预编译头
继续阅读 »
2.1.5版本现已进入收尾阶段,此版本加入了一大波新特性,目前正在进行稳定性测试和修复,在这里,先来介绍下新版本中引入了哪些些新特性和改进。
1. 提供类似cmake的find_*系列接口,实现各种查找,例如:find_package, find_library, find_file, ...
2. 提供模块接口,实现编译器的各种检测,例如:has_features, has_flags, has_cincludes, has_cfuncs, ...
3. 实现大量扩展模块,提供文件下载、解压缩、git操作等接口
4. 支持预编译头文件支持,改进c++编译效率
5. 支持在工程中自定义模块进行扩展
6. 提供代码片段检测接口,实
继续阅读 »
为了进一步提升构建效率,减少没必要的重建,xmake新增了对头文件的依赖检测,以及自动构建仅仅需要重新编译的源文件,提升编译速度,并且完全支持windows、linux、macosx等大部分平台。。
由于检测过程本身也会有一些性能损耗,因此xmake对此进行了深度优化,实现极速依赖检测:
对依赖头文件进行过滤,如果是系统头文件,非自身项目的第三方头文件,自动忽略,这些头文件基本上不会再开发项目的时候,经常变动,所以没必要去每次检测他们,如果真有变动,手动重建下就行了
针对每个头文件的检测结果进行缓存,直接应用到下一个源文件上,减少重复检测的次数
其他一些细节优化
继续阅读 »
/* #include */
/* #include */
int main(){
char *c = malloc(10);
c[0] = 'a';
printf("hi, ");
printf("%s\n", c);
free(c);
return 0;
}
为什么这个程序缺了头文件, 依然可以正常编译运行, 并且有正确的结果?
继续阅读 »
主页
源码
更新内容
新特性
增加头文件依赖自动检测和增量编译,提高编译速度
在终端中进行颜色高亮提示
添加调试器支持,xmake run -d program ...
改进
增强运行shell的系列接口
更新luajit到v2.0.4版本
改进makefile生成插件,移除对xmake的依赖,并且支持windows/linux/macosx等大部分pc平台
优化多任务编译速度,在windows下编译提升较为明显
Bugs修复
修复安装目录错误问题
修复import根目录错误问题
修复在多版本vs同时存在的情况下,检测vs环境失败问题
继续阅读 »
概述
此版本主要增强了vs201x工程的生成,以及支持vs2017编译环境,并且针对archlinux提供更加方便的aur安装。
项目主页
查看文档
详细更新内容如下:
新特性
添加aur打包脚本,并支持用yaourt包管理器进行安装。
添加set_basename接口,便于定制化修改生成后的目标文件名
改进
支持vs2017编译环境
支持编译android版本的rust程序
增强vs201x工程生成插件,支持同时多模式、架构编译
Bugs修复
修复编译android程序,找不到系统头文件问题
修复检测选项行为不正确问题
#57: 修复代码文件权限到0644
构建演示
继续阅读 »