使用W64Devkit的Windows应用程序开发指南

2021-03-12 00:42:49

建筑服务的趋势,在单片应用程序中,适合单片应用程序,或者使用JavaScript和Python然后被他们的Ortome部署故事困扰。这导致与应用程序的捆绑万维网浏览器相同的解决方案,或者使用容器Tocircumscribe由神秘肉制成的庞大依赖树。

我的小型开发分配W64Devkit,是我自己的小路,抵御这一趋势的趋势。以下在手工队长的项目的脚步之下,从头开始制作视频游戏,这是我的导游使用我的开发套件的Tono-Fonsense软件开发。它是工具和开发工作流程的anoverview,而且我试过没有绘制读者的太多了解。作为指导而不是手动,它是不完整的,我链接到大量外部resourcesto填补空白。该指南用一款我用我的开发套件编写的小型游戏封装,用作物品的演示不仅可能,而且相当合理地达到。

当然,如果您还没有,则无法使用开发套件。转到版本部分并下载最新版本。它将bec .zip文件名为w64devkit-x.y.z.zip的文件,其中x.y.z是版本。

您需要在使用之前解压缩开发套件。 Windows Hasbuilt-in支持.zip文件,因此您可以右键单击以访问“Extract All ...”或作为文件夹导航,然后拖动到.zip文件外部的某处W64Devkit目录。它没有腐蚀它被解压缩(又名是“便携式”),所以把它放在哪里是谁的谁,你的桌面,用户配置文件目录,拇指驱动器等。如果你改变你的思想,你稍后再像你一样改变你的思想重新术外运行它。如果您决定不再需要它,然后删除。

在解压缩的W64DEVKIT目录中有一个激活.bat。这是进入开发环境的最简单方法,不会要求要求更改。此批处理文件将套件的程序置于路径环境变量,然后运行Bourne shell - 标准箱shell。除了文本编辑器之外,这是福利软件的主要接口。及时,您甚至可以使用自己的工具扩展此环境。

如果您想要另一个“终端”窗口,请再次运行Activate.bat。如果您使用它很多,您可能想要创建快捷方式甚至PIN IT Toyour Task Bar。

无论是在Windows还是UNIX的系统上,当您键入命令中的命令时,它将使用Path环境变量来定位实际应用程序以为该命令运行。在实践中,路径变量是多个目录的焦点,并且shell按顺序搜索到的主导。在类似UNIX的系统上,路径元素是分离的不计的。但是,Windows使用冒号来分隔驱动器字母,因此其路径元素由分号分隔。

对于更高级用户而不是使用Activate.bat,您可以将“您的帐户编辑环境变量”并手动将W64Devkit的Bindirectorcy添加到您的路径中,使得在系统中通常可用的工具。如果您已经走了这条路,可以使用SH -L开始一个伯恩壳。 (-l选项请求登录shell。)

还从UNIX World借来是由家庭环境变量指定的主目录的概念。默认情况下,这将是您的配置文件目录,通常是C:/用户/ $用户。登录shells alwordstart在主目录中。此目录通常由TILDE(〜)表示,并且许多程序会自动将领先的波浪扩展到主典。

shell是命令解释器。它被命名为这样,因为它围绕操作系统内核周围的shell - 内核的UsterInterface。您的系统的图形界面 - WindowSexplorer或Explorer.exe - 真的只是一种壳牌。那个屏蔽围绕着鼠标和图形。这一切都很好,但是一个键盘导向的命令shell远远更适合开发任务。它更有效率,但更重要的是它的功能可编程:复杂的操作和流程可以构建起来简单,易于理解的工具。接受它!

在shell中,您可以在带CD的目录之间导航Mkdir的Makedir传输,用RM删除文件,与Grep等的RM,正则表达式TextSearches。运行BusyBox,以查看可用性的列表。遗憾的是,没有手动页面,但您可以使用BusyBox CMD - Help的任何命令CanAccess基本使用信息。

Windows'Standard命令shell是cmd.exe。不幸的是,这个shell很不当,主要存在于遗留兼容性。对于用户正常需要壳牌,预期的替代是PowerShell。它的改善和1)它仍然是平庸,2)坚持PosixShell惯例显着提高了构建便携性,3)UNIX Toolknowledge可转移到基本上是每种其他操作系统。

Unix的标准壳是Bourne Shell,Sh。使用当今Bourne Shell克隆的壳体具有超级特性。最受欢迎的内容壳是Bash和Zsh。在Linux上,Dash(Debian Almquistshell)已经成为非交互式使用(脚本)的流行。使用W64Devkit的shellIncluded是Almquist Shell(Ash)的BusyBox叉,与DASH密切相关。 Almquist Shell几乎没有超越标准Bourne Shell的非互动性,因此,由于剧本所需的脚本可以被视为普通的Bourne壳克隆。这就是为什么ITYP上由名称SH引用它。

但是,BusyBox的Almquist Shell具有与Bash相同的交互功能,而Bash用户应该非常舒适。这不仅仅是标签 - 完成了一系列类似的eMacs键盘:

采用Ctrl-R的特殊记录,这是群体最重要和最强大的挑战。频繁使用是一种很好的习惯。不要捣碎Uprarrow以通过命令历史搜索。

CygWin和MSYS2用户的特殊注释:shell了解WindowsPath,并未呈现虚拟UNIX文件系统方案。这种对脚本的后果,两者都好坏。 shell evensupports反斜杠作为目录分隔符,尽管您应该是prenfer forward slashes。

登录shell(-l)评估启动时〜/ .profile的内容。此目的是自定义shell配置的机会,例如设置环境变量或定义别名和函数。例如,如果您希望提示以绿色显示工作目录,您将在〜/ .profile中设置ps1:

如果您发现自己使用相同的命令序列或一组选项作用,则可能会考虑将这些命令放入脚本,然后将该脚本安装在路径上的某个位置,以便您将其作为新命令。首先制作一个目录来保存您的脚本,Sayin〜/ bin:

如果您不想启动一个新鲜的shell来试用它,请加载当前shell中的新配置:

假设您继续将焦油交换机混在一起,您希望您有一个untar命令做正确的事情。使用以下内容创建〜/ bin中的文件名的Untar或Untar.sh:

要了解有关Bourne Shell Scripting的更多信息,POSIX shell commandlanguage规范是一个很好的参考。该文档中的所有功能都可供Shell脚本使用。

开发套件包括强大而流行的文本编辑器Vim。它需要努力学习,但值得投资。它的功能包装了,但由于您只需要少量的主题定期,它并不像它出现的那样令人生畏。使用VimeFFectively,您将更快地编写和编辑文本。这不仅包括代码,而且包括散文:阅读员,文档等。

(Catch:非模态编辑将永远感到沮丧地效率低下。这不是因为您将在IT中毫不卑鄙,甚至在输入风格之间有疑难码码,但由于您现在要意识到它是哈巴德。)

Vim包含您自己的Tutorial,您可以访问vimtutor命令的绝对初学者。它将在控制台窗口中运行,并通过大约半小时的基础通过基础运行。不要害怕在任何时候返回教程,因为这是你需要知道的东西。

当实际使用Vim来编写代码时,您可以通过终端接口(Vim)继续码,或者您可以运行Thraphical接口(GVIM)。后者被推荐,因为它有精美的生活质量特征,但它并不严格必要。当启动GUI时,将AMPERSAND(&)放在命令上,以便它运行背景。例如,这会带上两个文件OpenBut的编辑器离开前台运行的shell,以便在编辑时继续使用:

Vim的默认值很好但不完善。在入门之前,在开始致法的代码之前,您应该至少在〜/ _vimrc中建立以下最少的配置。 (要更好地理解这些,请使用:帮助Tojump内置文档。)

图形界面默认为白色背景。在编辑代码时,许多人(包括ME)更喜欢“暗模式”,因此反转这一时尚选择了选择深色方案的问题。 Vim配有令人毛的颜色方案,其中大约有一半有黑色背景。使用:ColorScheme更改它,并将其放入〜/ _vimrc以保持它。

默认的图形界面包括菜单栏和工具栏。这是更好的方法来完成所有这些操作,其中没有任何要求鼠标,因此请考虑删除所有垃圾:

最后,由于开发套件围绕C和C ++导向,这里是C的Myown整个Vim配置,这使得它遵守自己的风格:

一旦你对基础知识感到满意,下一步就是阅读实用Vim:以德鲁尼尔的思考的速度编辑文本。它是一个纯粹的vim的一种自由习惯的指南。如果您持续无需享受您的胃口,请查看七种习惯的文本编辑。

我们建立了shell和文本编辑器。接下来是用于编写实际应用程序的开发工作。最终,您将在Vim内调用Acompiler,这将解析编译器消息并对需要注意的源代码的部分来解析。在WEGET之前,让我们从基础开始。

经典榜样是“Hello World”程序,我们假设ISIN一个名为Hello.c的文件:

虽然此开发套件提供了GNU编译器,GCC的版本,但本指南主要通过通用UNIX C Compilername,CC来讲述它。 UNIX的系统将CC安装为System'Sdefault C编译器的别名,并且W64Devkit也不例外。

此命令从hello.c中创建Hello.exe。由于这不是(尚未?)在路径上,必须通过路径名(即命令必须必须斜杠)调用它,因为否则shell将通过路径变量搜索它。通常这意味着在ProgramName前面放置./表示“在当前目录中运行程序”。作为一个方便,您不需要包含.exe扩展名:

与从以前的Untar shell脚本不同,这个hello.exe是w64devkit的完全独立。您可以与运行Windows的人分享它,并且能够执行它。可执行文件有一点点运行时嵌入的嵌入式,但大部分运行时都在操作系统中。我想突出这一点,因为大多数编程语言没有这样的编程,或者至少这样做是不自然的,很多人都是不自然的。您的软件用户无需安装运行频率其他支持软件。他们只是运行你给他们的可执行文件!

可执行文件可能很小,小于50kb - 基本上是当今标准的amiracle。当然,现在几乎没有做任何事情,但是你可以在没有该执行的情况下添加更多功能的功能。事实上,它现在完全没有优化,并且可以更小。传递--OS标志告诉编译器以优化大小和-s标志告诉链接器删除不必要的信息。

将程序减少到其前一大小的三分之一。如果你仍然可以做得好,但这在本指南的外面。

到目前为止,该计划仍然足以编制但却是占有的错误。编译器可以警告许多这些错误,而且它总是值得支持这些警告。这需要两个标志:-WALL(“所有”警告)和 - 乌克拉(额外的警告)。

当您在程序上工作时,您往往不希望优化,因为它使得调试更加困难。但是,除非启用优化,否则未解雇一些警告。幸运的是,有一个optimization级别来解决这个问题,-og(优化调试).combine与-g嵌入程序中的调试信息。稍后,这会很方便。

这些是您通常想要在发展中型日志性软件时启用的编译器标志。分发时,您可以使用-os -s(优化尺寸)或-o3 -s(优化速度)。

我提到从Vim运行编译器。这不是直接完成的,但是叫做makefile的特殊构建脚本。您可以调用vim的make程序,该程序调用上面的编译器。像这样的最简单的makefile wapslook,在字面上命名的makefile中:

这告诉这让名为Hello.exe的文件来自另一个名为hello.c的文件,而选项卡缩进线是Toingso的配方。运行Make命令将运行Compiler命令(仅if hello.c)才会比hello.exe更新。

要从Vim运行make,请使用:make命令在Vim内。它会不会运行,但也会在称为QuickFix列表的内部缓冲区中捕获其输出。如果有任何警告或错误,Vim将跳转。使用:CN(下一个)和:CP(上一页)在问题和更正的问题之间移动,或:CC重新显示当前问题。当您完成修复问题时,运行:再次达到循环。

现在尝试通过更改打印的消息并从Inhevim重新编译来尝试。故意创建一个错误(不良语法,太多的参数等)并查看会发生什么。

Makefiles是构建C和C ++软件的功能强大且传统的方法.SINCE开发套件包括标准的UNIX实用程序,非常容易编写跨越Aoperating系统和环境的便携式Makefiles。您的软件不一定是以Windows连接的,因为您正在使用基于Windows的开发环境。如果您想了解Makefiles如何工作以及如何使用无效,请阅读Portable Makefiles上的教程。从这里开始,我会假设你已经阅读了这一教程。

.posix:cc = cc cflags = -wall -wextra -og -g ldflags = ldlibs = exe = .exe hello $(exe):hello.c $(cc)$(cflags)$(ldflags)-o $ @ hello .c $(ldlibs)

这是一个非常多的Windows第一风格Makefile,但仍然允许它舒适地使用其他系统。在Linux上,这使得invocationstrips远离.exe扩展名:

对于Windows-second makefile,用EXE = .exe删除该行。这一切都来自环境。因此,例如,我已经在我的w64devkit〜/ .profile中删除了exe环境变量:

在Linux上运行make做正确的事情,正如运行make onwindows一样。无需特殊配置。

如果我的软件真正限于Windows,我仍然很感兴趣地掩盖交叉编译。 GNU Toolchains的一个常见公约是一个横跨makefile宏。例如:

.posix:cross = cc = $(cross)gcc cflags = -wall -wextra -og -g ldflags = ldlibs = hello.exe:hello.c $(cc)$(cflags)$(ldflags)-o $ @ hello .c $(ldlibs)

在Windows上,我刚刚运行make,但在Linux上,我会恰当地设置交叉。

如果您正在进行更大的程序,并且需要跳过函数,宏或变量的定义,则会发生什么?一直在寻找定义,这将是繁琐的淘汰。开发套件包括用于构建标签数据库的CTAG的实体实现,列出各种定义的Thelocations,Vim知道如何读取该模式。最常常你想要递归地运行它:

使用标识符上的光标,按Ctrl-]跳转到该名称的定义。使用:tn和:tp在不同的定义之间移动(例如,当名称过载时)。或者如果您在缓冲区中列出的名称,则使用标记,使用:tag命令用name跳转.vim维护标签堆栈和跳转列表以便以浏览器中的Hadbackward和转发按钮保持标记堆栈和跳转列表。

我已经提到-g选项在另外的情况下嵌入额外信息。这是为调试器,开发套件包括GDB,GDB,帮助您调试程序。最常用的方法使用调试器是直接从中调用您的程序:

从这里您可以设置断点,然后使用“开始”或“运行”程序,然后按行顺列步骤。将Beej的QuickGuide咨询到GDB的指南。

到目前为止,本指南实际上并没有承担任何C知识。学习C的一个人之一是通过阅读高度考虑的C编程语程并进行练习。或者,无成本的选择是BEEJ的C编程和现代C(MoreadVanced)指南。您可以使用开发套件来完成其中任何一个。

我专注于C,但上面的一切也适用于C ++。为了学习C ++,C ++之旅是一个安全的赌注。

为了说明你可以做多少,而不是这个76mbdevelopment套件,这是一个周末项目形式的品味:窗户的小行星克隆。

开发套件不包括Git,因此您需要何时安装才能克隆存储库,但您至少可以跳过并下载源的.zip快照。它没有第三方竞争,但它包括硬件加速的图形,实时混音和游戏表输入。建立一个更大,更复杂的游戏,更少关于工具,更多关于时间和技巧。这就是关于w64devkit的内容(几乎)你需要的一切。

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