W64devkit:(几乎)你需要的一切

2020-09-25 13:43:12

今年5月,我把我自己的Windows C和C++开发发行版w64devkit放在一起。整个版本的重量在80MB以下,不需要安装。解压缩并在任何位置运行itin-place。它也是完全离线的。它永远不会自动更新,甚至不会接触到网络。在短短几秒钟内,任何Windows系统都可以成为一台可靠的开发机器。(要进一步提高可靠性,请断开与互联网的连接。)。尽管w64devkit的性质简单且包装小巧,但它几乎是您开发任何专业桌面应用程序所需的一切,从命令行实用程序到AAA游戏。

我的意思不是什么没用的图灵式的完全意义上的,而是实际的、做事的意义上的。这更多的是技术诀窍的问题,而不是工具或库的问题。那这“差一点”是怎么回事呢?

该分发版没有WinAPI文档。众所周知,它很难获得,而且对再分配也不友好。它对于与操作系统接口是必不可少的,没有它很难工作。即使是一本枯树参考书也足够了。

根据您正在构建的内容,您可能仍然需要专门的工具。例如,游戏开发需要编辑艺术资产的工具。

没有正式的源代码控制系统。根据公告中提到的问题,Git被排除在外,我的下一个选择,被子,也有类似的限制。但是,包含了diff和patch,对于一种老式的、基于补丁的源控制来说已经足够了。在重新安装Windows时,我已经成功地使用了它。

正如我在公告中所说,w64devkit包含一个功能强大的文本编辑器,可以满足从代码到文档的所有文本编辑需求。该编辑器包括教程(Vimtutor)和完整的内置手册(:help),如果您还不熟悉它的话。

那导航呢?使用包含的ctag生成atags数据库(ctag-R),然后随时立即跳转到任何定义。不需要那些语言服务器协议的垃圾。这并不意味着您必须在工作时费力地键入标识符。使用内置完成功能!

构建系统?通过支持Windows的类似Unix的环境(包括make)也涵盖了这一点。学习如何使用它是不可能的。软件本质上是不可避免的复杂的,所以不要把它弄得过于复杂。

那调试呢?使用调试器gdb。性能问题?使用分析器gprof。通过请求编译器输出(-S)或通过反汇编程序(objdump-d)检查编译器输出。不需要为GodboltCompiler Explorer上网,尽管它很巧妙。如果编译器输出不足,请使用SIMD内部函数。在最坏的情况下,有两个不同的汇编器可用。实时图形?使用操作系统API,如OpenGL、DirectX或Vulkan。

W64devkit几乎就是您需要的所有东西,放在一个单独的、毫无意义的、完全脱机的包中!很难像我想要的那样强调这一点。在与更广泛的软件生态系统互动时,我经常绝望地认为软件开发已经迷失了方向。这种分布是我从一些疯狂中解脱出来的一种方式。作为一个C和C++工具链,w64devkit在默认情况下生产出简洁、合理、平凡的、可分发的、离线友好的工件。分发中的所有运行时组件都只是静态链接,因此也不需要随应用程序分发DLL。

虽然大多数用户可能会坚持使用我发布的版本,但buildingw64devkit是一个只有一个构建依赖项(Docker)的两步过程,任何人都可以根据自己的需要轻松地对其进行定制。不关心C++吗?把它扔掉就可以把配给刮掉20%。需要调优特定微体系结构的运行时吗?调整编译器标志。

开源的预期优势之一是用户可以根据自己的需要修改软件。使用w64devkit,您拥有工具链本身。毕竟,这是您的依赖之一。不幸的是,构建最初需要互联网连接,即使是在源码tarball中工作,但至少这是一次性事件。

如果您选择依赖项,并且使用w64devkit构建这些依赖项,那就更好了!您可以根据需要调整它们,并精确选择它们的构建方式。你将不会依赖于互联网的善意,也不会依赖免费软件包注册的慷慨。

使用w64devkit构建现有软件可能比预期的要容易,特别是因为很多软件已经“移植”到了MinGW和Mingw-W64。只要不麻烦GNU Autoconf配置脚本即可。他们从不在w64devkit中工作,尽管他们拥有技术上需要的一切。除此之外,这里还有一个构建一些流行软件的演示。

我的一个同事使用他自己的PuTTYpatching版本来更好地处理Emacs。如果您想要执行同样的操作,请抓取源代码tarball,使用提供的工具将其解压,然后在解压后的源代码中:

(由于PuTTY中的错误,-fcommon标志当前是必需的。)。您将拥有一个定制的PuTTY.exe以及其他工具。如果您有任何补丁,请先使用这些补丁!

是否要在应用程序中嵌入扩展语言?LuaI是一个可靠的选择,部分原因是它是一个行为良好的依赖项。解压源代码tarball之后:

这将产生一个完整的Lua编译器、运行时和库。甚至有必要使用Makefile,因为它几乎和“cc*.c”一样简单-轻松地集成或嵌入到任何项目中。

你喜欢Nethack吗?也许您想试几个定制补丁。这个稍微复杂一些,但我能够构建Nethack 3.6.6,如下所示:

$cd src/winnt/$nhsetup.bat$cd../../src/$sed-i s/mingw32-make/make/g Makefile.gcc$make-f Makefile.gcc cc=";cc-fcommon";link=";cc";

Nethack与PuTTY有相同的错误,这是必需的-fcommon。如果您有任何补丁,请在最后一步之前使用补丁。我在这里不再赘述,但只要多花一点力气,我就能够通过PDCurses生成一个支持诅咒的Nethack二进制文件-当然是静态链接的。

我的档案加密工具Enchive怎么样?它甚至可以与16位DOS编译器一起使用。它根本不需要什么特别的东西!

W64devkit还可以托管其自身的部分:通用Ctag、Vim和NASM。这意味着您可以修改和重新编译这些工具,而无需完成Docker构建。遗憾的是,Busybox-W32不能自己托管,尽管它已经很接近了。如果w64devkit可以完全托管自己,那么docker--因此也就是互联网连接之类的--只需要启动就好了,但不幸的是,考虑到GNU组件的状态,这是不现实的。

软件开发越来越依赖于持续的互联网连接。健壮的离线工具和开发被低估了。

请考虑:您当前的项目是否依赖于外部服务?您是否为这项服务付费以确保其正常运行?如果您从存储库中提取依赖项,您对维护包的人有多信任?你知道他们的名字吗?如果这项服务永久停机,您的项目的命运会是怎样的呢?总有一天会的,尽管希望只有在你的项目死了并被遗忘之后。如果你有能力永久离线工作,那么你已经对所有这些问题都有了满意的答案。

对这篇文章有什么评论吗?通过发送电子邮件至~Skeeto/[email protected][邮件列表礼仪]开始我的公共收件箱中的讨论,或查看现有讨论。