xmake 是一个基于 Lua 的轻量级跨平台构建工具,使用 xmake.lua 维护项目构建,相比 makefile/CMakeLists.txt,配置语法更加简洁直观,对新手非常友好,短时间内就能快速入门,能够让用户把更多的精力集中在实际的项目开发上。

在这个新版本中,我们对 Intel 系列的 C++ 和 Fortran 编译器做了全平台支持,并且改进了上个版本新加的 Wasm 工具链支持,同时对 Qt SDK for Wasm 也进行了支持。

另外,我们还将 luajit 升级到最新的 v2.1 版本,在跨平台方面,xmake 也做了很大的完善,增加了 mips64 架构的运行支持。

  • 项目源码
  • 官方文档
  • 入门课程

新特性介绍

Intel C++ 编译器支持

这个版本上,我们对 Intel 系列的 C++ 编译器做了全平台支持,包括 windows上的 icl 以及 linux/macOS 下的 icc/icpc。

要想启用 Intel C++ 编译器,我们只需要在安装了的 Intel 编译器的系统上,通过 --toolchain=icc 参数切换到对应的工具链即可。

$ xmake f --toolchain=icc
$ xmake

Intel Fortran 编译器支持

之前的版本,xmake 仅仅支持 gfortran 编译器,而这个版本,我们也支持了 Intel Fortran 编译器,也就是 ifort,我们也只需要切换到对应的 ifort 工具链即可使用。

$ xmake f --toolchain=ifort
$ xmake

Wasm 平台和 Qt/Wasm 支持

上个版本,我们新增了 --toolchain=emcc 工具链来支持 wasm 程序的编译,但是仅仅指定工具链,并不能很好的调整目标程序的扩展名,例如对 *.js*.wasm 的文件生成。

而新版本,我们继续新增了 xmake f -p wasm 平台,内置启用 emcc 工具链,并且再次基础上对周边的配置做了更好的完善。

只要切换到 wasm 平台,xmake 会默认生成 *.js 以及对应 *.wasm 等目标文件,还会额外生成可以加载 js 来运行 wasm 程序的 *.html 页面。

另外,我们还对 Qt SDK for Wasm 也做了支持,比如我们创建一个 Qt QuickApp 工程。

$ xmake create -t qt.quickapp_static quickapp

这里,我们注意到,我们创建的是需要静态link的Qt工程,因为 wasm 版本的 Qt 库,我们需要强制静态链接到程序才能正常使用。

生成的工程文件 xmake.lua 内容大概如下:

add_rules("mode.debug", "mode.release")includes("qt_add_static_plugins.lua")target("demo")add_rules("qt.quickapp_static")add_headerfiles("src/*.h")add_files("src/*.cpp")add_files("src/qml.qrc")add_frameworks("QtQuickControls2", "QtQuickTemplates2")qt_add_static_plugins("QtQuick2Plugin", {linkdirs = "qml/QtQuick.2", links = "qtquick2plugin"})qt_add_static_plugins("QtQuick2WindowPlugin", {linkdirs = "qml/QtQuick/Window.2", links = "windowplugin"})qt_add_static_plugins("QtQuickControls2Plugin", {linkdirs = "qml/QtQuick/Controls.2", links = "qtquickcontrols2plugin"})qt_add_static_plugins("QtQuickTemplates2Plugin", {linkdirs = "qml/QtQuick/Templates.2", links = "qtquicktemplates2plugin"})

上面的配置中,我们除了启用 qt.quickapp_static 编译规则,还通过 qt_add_static_plugins 配置了一些必须的 Qt 插件。

接下来,我们只需要切换到 wasm 平台,并确保 Qt SDK 已设置,即可完成编译。

$ xmake f -p wasm [--qt=~/Qt]
$ xmake

完成编译后,xmake 会在 build 目录下生成 demo.html 以及对应的 demo.js/demo.wasm 程序,我们打开 demo.html 页面即可运行我们编译的 Qt 程序,显示效果如下图:

关于 Qt/Wasm 更加详细的说明,见:Issue #956

新增 Math/Float-point 编译优化设置

我们新增了一个 set_fpmodels() 设置接口,用于设置浮点的编译模式,对数学计算相关优化的编译抽象设置,提供:fast, strict, except, precise 等几种常用的级别,有些可同时设置,有些是有冲突的,最后设置的生效。

关于这些级别的说明,可以参考下微软的文档:Specify floating-point behavior

当然,对应gcc/icc等其他编译器,xmake 会映射到不同的编译flags。

set_fpmodels("fast")
set_fpmodels("strict")
set_fpmodels("fast", "except")
set_fpmodels("precise") -- default

关于这块详情见:Issue #981

OpenMP 支持

为了更加抽象简单的启用 openmp 特性,我们可以通过新增的 c.openmpc++.openmp 这两个规则来设置,另外 linux、macOS 上我们需要额外的 libomp 库才行,因此可以通过 add_requires("libomp") 来快速引用和集成。

add_requires("libomp", {optional = true})
target("loop")set_kind("binary")add_files("src/*.cpp")add_rules("c++.openmp")add_packages("libomp")

如果是c代码,需要启用 add_rules("c.openmp"),如果是 c/c++ 混合编译,那么这两个规则都要设置。

c11/c17 的支持

新版本中,xmake 对 set_languages 也做了改进,增加了新的 c11/c17 设置项,同时对最新版本 msvc 提供的 /std:c11/std:c17 也做了适配和支持。

我们只需要简单的设置:

set_languages("c17")

即可启用 c17 标准来编译,即使低版本 msvc 等编译器不支持,xmake 也会自动忽略设置。

更好的 Mingw 支持

关于这块的改进,涉及几个方面,首先是 Windows 下 Mingw SDK 根目录的自动探测的改进,大部分情况下,我们都不需要额外配置 --mingw= 参数显式指定路径,也能够自动检测到了。

关于这块详情,见:Issue #977

另外,除了 Msys2/Mingw 还有 macOS,linux/Mingw,我们在新版本中还额外支持了 llvm-mingw 这个 SDK,使得我们可以使用 mingw 来编译 arm/arm64 架构的程序。

$ xmake f -p mingw -a arm64
$ xmake

另外,在远程依赖包的自动编译集成上,现在带有 cmakelists 的第三方库,即使是 mingw 平台,xmake 也能自动编译集成进来直接使用,非常的快速方便。

而最近 xmake-repo 官方 C/C++ 包仓库中,我们也新增收入了不少支持 mingw 平台的新库,可直接使用。

更好的跨平台运行

我们新增了对 mips64 架构的 linux 系统运行支持,另外改进了 arm/arm64 下 xmake 的运行稳定性,通过合入最新的 luajit v2.1 ,解决了很多 luajit 遗留的问题,比如 arm64 下 lightuserdata 的 bad pointer 等问题。

新增 macOS Sierra for arm64 支持

xmake 还对最新的 Xcode-beta 进行了适配,新增了 macOs for arm64 的目标程序编译支持,只需要切到 arm64 架构编译即可。

$ xmake f -a arm64 [--xcode=Applications/Xcode-beta.app/]
$ xmake

当然,前提是在 macOS 下运行,并且使用最新支持 Developer Transition Kit (DTK) 的 Xcode-beta 版本才行。

官方仓库收录更多的 C/C++ 库

在 xmake 的官方 C/C++ 仓库 xmake-repo 中,我们最近新增了几十个常用的 C/C++ 库,并且还对 libx11 系列的库都全部进行了收录。

虽然,仓库的包维护工作量巨大,但是目前的发展趋势也日趋活跃,我们收到了越来越多的用户对仓库包的贡献和改进维护。

并且,现在我们的官方仓库已经可以快速集成:linux, macOS, windows, mingw, bsd, msys, iphoneos, android 等八大常用平台的库,实现真正的跨平台 C/C++ 远程依赖库集成和使用支持。

目前我们收录的一些包列表和支持平台,可以从这里查看:PKGLIST.md

我们一直在努力解决 C/C++ 库生态的杂乱、集成使用繁琐等问题,提供快速一致的自动集成和编译方案,xmake 不仅支持 vcpkg/conan/clib/homebrew 等第三方官方仓库包的集成,并且也在努力完善自建的官方仓库,实现更好的集成体验。

例如:

add_requires("tbox >1.6.1", "libuv master", "vcpkg::ffmpeg", "brew::pcre2/libpcre2-8")
add_requires("conan::openssl/1.1.1g", {alias = "openssl", optional = true, debug = true})
target("test")set_kind("binary")add_files("src/*.c")add_packages("tbox", "libuv", "vcpkg::ffmpeg", "brew::pcre2/libpcre2-8", "openssl")

带有 vcpkg::brew::conan:: 等命名空间的包,会自动切换到对应的第三方包仓库去下载集成,而默认的 tbox >1.6.1 等库,则会默认使用 xmake-repo 官方仓库中提供的包。

使用和集成方式完全一致,xmake 会自动下载、编译、集成和链接。

关于远程包的依赖集成的更多详细说明,我们可以看下相关的文档说明:远程依赖库集成和使用

同时,我们也欢迎更多的人参与进来,帮忙一起改善 C/C++ 的库生态的建设,提供简洁一致的库使用体验,我相信 C/C++ 包管理和库生态并不比 Rust/Go 差。

更多的发行版安装支持

在新版本中,我们将 xmake 提交了 Ubuntu PPA 源,因此除了现有的脚本安装方式外,我们也可以通过 apt 去快速安装 xmake。

sudo add-apt-repository ppa:xmake-io/xmake
sudo apt update
sudo apt install xmake

同时,我们也将包提交到了 Copr 包管理仓库,使得我们也可以在 Fedora, RHEL,OpenSUSE,CentOS 等发行版中,通过 dnf 来快速安装 xmake。

sudo dnf copr enable waruqi/xmake
sudo dnf install xmake

入门课程

近期,我们也上线了官方的 xmake 入门课程,Xmake 带你轻松构建 C/C++ 项目 以边学边做实验的方式快速学习 xmake 的使用。

更新内容

新特性

  • #955: 添加 Zig 空工程模板
  • #956: 添加 Wasm 编译平台,并且支持 Qt/Wasm SDK
  • 升级luajit到v2.1最新分支版本,并且支持mips64上运行xmake
  • #972: 添加depend.on_changed()去简化依赖文件的处理
  • #981: 添加set_fpmodels()去抽象化设置math/float-point编译优化模式
  • #980: 添加对 Intel C/C++ 和 Fortran 编译器的全平台支持
  • #986: 对16.8以上msvc编译器增加 c11/c17 支持
  • #979: 添加对OpenMP的跨平台抽象配置。add_rules("c++.openmp")

改进

  • #958: 改进mingw平台,增加对 llvm-mingw 工具链的支持,以及 arm64/arm 架构的支持
  • 增加 add_requires("zlib~xxx") 模式使得能够支持同时安装带有多种配置的同一个包,作为独立包存在
  • #977: 改进 find_mingw 在 windows 上的探测
  • #978: 改进工具链的flags顺序
  • 改进XCode工具链,支持macOS/arm64

Bugs修复

  • #951: 修复 emcc (WebAssembly) 工具链在windows上的支持
  • #992: 修复文件锁偶尔打开失败问题

xmake v2.3.8 发布, 新增 Intel C++/Fortran 编译器支持

5.15 vs2019 静态编译_xmake v2.3.8 发布, 新增 Intel C++/Fortran 编译器支持相关推荐

  1. 5.15 vs2019 静态编译_Go Web 开发如何优雅的包含静态资源文件?

    点击上方蓝色"Go语言中文网"关注我们,领全套Go资料,每天学习 Go 语言 静态文件,也有人叫资产或资源,是一些被程序使用.没有代码的文件.在 Go 中,这类文件就是非 .go ...

  2. 5.15 vs2019 静态编译_HPCC S01E01 编译 win10,ubuntu 安装

    本文使用 Zhihu On VSCode 创作并发布 首先HPC Challenge的编译需要bash.不能用cmd. ubuntu会自带bash,win10需要另外安装bash,可以使用msys2 ...

  3. QT5.15.2静态编译MSVC2019

    下载源码: 官网:下载地址 腾讯源:下载地址 清华源:下载地址 查看源码编译环境 源码目录中的README文件 Windows:    -------- Open a command prompt. ...

  4. swift-annotations:java编译时警告主版本 52 比 51 新, 此编译器支持最新的主 版本。

    今天在java bean代码中加入swift的注释时,编译时提示了警告: [javac] 警告: J:\facelog\db\sql2java\lib\swift-annotations-0.23.1 ...

  5. CloudQuery v2.0.0 发布 新增数据保护、数据变更、连接管理等功能

    哈喽社区的小伙伴们,经过一个月的努力,CloudQuery 社区版发布了全新 v2.0.0系列! 对比 v1.5.0,v2.0.0 在整体 UI 界面上就做了很大调整,功能排布我们做了重新梳理,可以说 ...

  6. Java静态编译技术:突破Java“冷启动”桎梏,实现启动性能“质”的飞跃

    自1996年诞生以来,Java语言长期在最受欢迎的编程语言排行榜中占据领先地位.除了语言本身的优秀特性之外,Java语言持续演进.不断发展也是它能够保持长盛不衰的重要原因. |Java市场份额不断下降 ...

  7. windows下 Qt 静态编译

    似乎一直没有静态编译Qt的需求:一不在没有管理员权限的机器上使用,二不制作绿色软件,三....动态编译工作得很好,再配合 nsis 制作一个安装包,有什么必要静态编译呢? 但论坛中似乎总是不停有人问到 ...

  8. Qt 静态编译(5.15.2 MinGW 32-bit)

    Qt 静态编译(5.15.2 MinGW 32-bit) 文章目录 Qt 静态编译(5.15.2 MinGW 32-bit) 摘要 1 编译前准备 1.1 编译环境准备 系统环境 Qt 版本 gcc ...

  9. arm-linux-gcc静态编译和动态编译的区别

    很多教程会提到加上-static是静态编译,但对于新手来说没有用例子来说明可能不太好理解,今天我就介绍一下关于这方面知识的一个例子: 最近在做一个关于freetype字体的东西,需要依赖freetyp ...

最新文章

  1. 基于Ubuntu Hadoop的群集搭建Hive
  2. 三类医械计算机系统要求,三类医疗器械计算机管理系统要求
  3. openssl加密http网站过程1
  4. java怎么访问视图_springmvc-直接访问视图文件
  5. Android Crash分析工具arm-eabi-addr2line
  6. 请解释Spring Bean 的自动装配?
  7. tic tac toe php,Python tic-tac-toe检测作弊
  8. 如何判断一个new出来的空对象
  9. java mysql tomcat my_Java、Tomcat 及 MySQL 环境配置
  10. 【clickhouse】clickhouse 临时表
  11. 学习OpenCV——SVM 手写数字检测
  12. Qt中QScrollArea控件区域与滑动条的颜色不一致设置
  13. 实验吧CTF密码学Writeup
  14. Xcode真机调试中There was an internal API error错误解决方法
  15. ROS远程连接Turtlebot3并进行简单的移动控制
  16. Android 点击图片放大至全屏 再次点击关闭过度动画 Shared Element效果(共享元素效果)
  17. Nginx 优化参考 —— 筑梦之路
  18. wpf datagrid自动生成列时特殊字符转换
  19. Python for 循环 控制步长
  20. 三级linux网络管理及应用技术,浙江省大学计算机三级Linux网络管理及应用.doc

热门文章

  1. seo爬虫工具 php,爬虫工具有哪些(爬虫网页分析工具)
  2. 关于不过洋节的通知_国家有规定不许过圣诞节等洋节吗?
  3. 读书笔记——《程序员的思维修炼:开发认知潜能的九堂课》
  4. Leetcode每日一题:424.longest-repeating-character-replacement(替换后的最长重复字符)
  5. CCF2015-12-2 消除类游戏
  6. 用JavaScript刷leetcode(刷题 第一天)
  7. 详解vue动画的封装
  8. 计算机中丢失ENWeb,webapi session 丢失
  9. c语言基于easyX樱花特效,C++基于easyx图形库实现推箱子游戏
  10. c语言程序设计教程第三版答案9.5,C语言程序设计-第5-9章习题解答.ppt