手动#2:Sunrise,据IDE的核心人物,Cmake和我对动物的失望

在上一篇文章中,我敢于使用CLion作为IDE。 然后一个男人跑来问一个问题:哦,专有的付费工艺品,卖光了,被窃笑了,等等。 公平地说,对哈布雷只有这样一条评论,但实际上有数千条评论。 例如,自2010年以来,我已经注册了最后一个有效的LOR帐户,并且在几乎所有涉及某些专有软件的讨论中,这都开始了。 显然,我不会向任何人证明任何东西,但是它可以帮助过去的难得的流浪汉。


本文有条件地分为两个部分:出于社会动机和技术(如何在Windows上的各种IDE下构建CMake)。




一切都去了哪里


上一篇文章的评论是文章的基础:“如果播客是针对初学者和非专业人士的,那么您为什么不考虑IDE许可证:(”及以下内容。


本文基于Twitch流的结果以及您对此的反馈。 该记录在YouTube上。 本文不是播客的笔录,而是理解它的产物。



源消息


首先,让我们检查一下原始假设的有效性:软件很昂贵。 如果您访问该站点,事实证明CLion每月花费8.90美元。 580卢布。 显然,对于一个不以编程为生的人来说,这有时可以显示出可用于一些更有用的东西的数额。 例如,买一顿饭。


对于专业人士而言,一切都完全不同,但是让我们离开这个话题。 记者与软件或游戏制造商的市场部门的员工不同,在于他不宣传党的政策,不采取措施宣传产品。 他按原样说话。 这一切真的如何,记者如何真正看到一个问题。 真正的传道人也是一样。


现象的本质和一连串的岁月,
朋友的面孔,敌人的面具,
清晰可见,无法隐藏
从诗人的眼中-几个世纪的主人。

遥远的星星的光和黎明的开始
生活的秘密和爱的秘密
受到阳光的熏陶,
一切都反映在诗人的灵魂中-
在世界的镜子里...

(c) 康斯坦丁·尼科尔斯基,《世界镜报》

如果真的很有趣,CLion如何增加您的收入,您会找到需要联系的人,在这里我们在谈论其他事情。


类型学


取而代之的是,考虑尽可能多的人从封闭的软件中遭到炸弹袭击。


如您所知,我不是nifiga的社会学家,而且我只有在论坛摊牌热中发展起来的类型学。 它的唯一优点是,通过查看前两个注释,实际上可以将一个人归为某个特定组,而无需包括大脑。


因此,人们是:


  • 自由斗士与开源
  • 老实说错
  • 动物

我建议不要考虑作者的错误。 我是另一回事


自由斗士与开源


最纯洁最聪明的是揭幕战的战士。 我本人就是那些听到“ Linux”一词并不断改正的人之一, “不是Linux,而是GNU / Linux” 。 问题在于现实世界绝不会是黑白的。 我们有一定程度的自由,这是必要时可以使用的资源。 正如Mozilla管理层的一个人开玩笑(或不开玩笑)说:“如果不花钱,为什么我们需要信任?”


例子:有一个这样的人,米格尔·德·伊卡萨。 他制作了Gnome,并以我们了解的方式帮助构建了一个令人反感的GNU / Linux。 然后他被赶出了社区,斯托曼称他为“自由叛徒”:


“ Miguel de Icaza本质上是自由软件社区的叛徒。 <...>该项目旨在安排Windows平台上所谓的“开源”程序的功能; 因此,开发人员的宝贵时间花在了免费平台上”

米格尔现在在哪里? 他和他的团队与近年来最大的项目之一并肩工作-在许可的情况下将.NET移植到GNU / Linux。 他确实度过了自己的时间。


在流上,我花了至少二十分钟才在Visual Studio Code下绊倒CMake。 无法解决。 在免费但不是免费的Visual Studio中,这是第一次出现。 这正是我们尝试使用自由软件时经常得到的:由于明显的原因,在开放源代码中,没有时间思考端到端脚本并照顾整个产品。 感谢开发人员至少做了一些事情。 但是对于我们来说,作为用户,我们仍然有道德和道德选择:要么选择自由,然后花大量时间踢免费软件,要么相反,将我们的自由花在购买时间上,然后花点时间做些好事。


由于此问题超出了技术问题的范围,因此我们将在此处结束。 一个真正的思想上的人对他的想法是正确的。


动物


哦,但是这个类别在轰炸我。


“一个人将他与其他动物区分开的特征是直立的姿势,高度发达的大脑,思维和表达清晰的语言。一个人学习并改变自己和周围的世界,创造出一种文化和自己的故事。” (c) 维基百科

不幸的是,在关于IDE的对话中,经常会发现对话者没有独立思考的能力,没有表达清楚的讲话,而是喃喃地说“我已经有了规范”并吃掉了他们给出的东西。 由于直立的姿势,很容易将其与人混淆,但不要误会。


这些生物将一切都带给任何人。 在游戏中,他们出售带有怀旧音乐的战利品和DLC。 在编辑器中,他们被戴在各种肛门上,目的是将患者与特定的环境,生态系统联系起来,以至于不需要苯扎西m 。 他们会吃掉一切。 “对我来说规范也是如此。”


重要的是要补充一点,不仅市场营销人员在开车,而且巨魔或自然的临床精神分裂者也是如此。 schizos很多,您不会相信的。


例如,还记得Nikitonsky最近发布的宣言(更准确地说,是将其翻译为Habr): 我对软件的失望 ? 我怎么被他炸了。 我衷心希望Nikitonsky写所有这一切是为了有意识地接触,而不是真的。


看那里的论文:


  • 一切都令人难以忍受的缓慢-一部现代手机比将人送上月球的电脑功能强大;
  • 一切都是巨大的-Android重达6 GB;
  • 一切都烂了-旧设备无法正常工作或无法正常工作;
  • 在编程混乱中,查看npm和左键盘中的依赖关系图。

拖钓是拖钓,但是某人可能并不熟悉源代码的大小是“使人登上月球的原因”,即Apollo 11,因此作者几乎不需要阅读它们。




现代OS定义了任何设备,并在每种情况下都具备了所有功能。 当梅里莎资本家弯腰发展铁水平到现代水平时,设备的减速导致了一个奇妙的情况,这归功于我们口袋里有一个适合所有场合的大型设备。 甚至不需要毛巾,它在Google Play上。 提到的npm可以让普通人写出数年前难以想象的复杂性。


然后,对于所有这些“吃饱了自己的东西”的同志来说,上面列出的宏大想法突然开始浮现在我的脑海。 让我们扩展到IDE:


  • 对于Electron(Visual Studio Code,Atom)上的应用程序,无论是vim还是emacs,字母在屏幕上的显示速度都太慢。
  • Eclipse IDE变慢;
  • 通常,Java以及包括Java编写的所有内容(包括NetBeans,IDEA和Clion)都会放慢速度。
  • 任何IDE都会像这样放慢饮食速度;
  • 独裁是邪恶的。
  • 清单继续。

这个清单已经足以检修屋顶。 不要相信任何垃圾。 如果在某些情况下vim比Eclipse更好(反之亦然),那么这绝对不是因为邻居用微波炉照射vimers,而外星人则在晚上绑架了蚀子。


不幸的是,由于长期的网络战争,它的确被确立了:这里不能进行对话。 对人-人,对动物-动物。 生活就是这样安排的。 有人阅读本文并改变主意的可能性非常小,这极大地改善了人们的看法


老实说错


现在,我们已经完成了极端工作:在光谱的一侧,特别是来自Stallman教派的聪明人,而另一方面则不是非常聪明的动物,让我们谈谈普通人。


第一个误解是我们在某种程度上被钉在了IDE上。 它始于人们使用某种Delphi 7和旧版本的Microsoft Visual Studio的时代。 他们说,在新的Vizhualka中,项目文件一切正常。 大家好,现在是2018年,没有奴隶制了。


为了摆脱奴隶制,我们从上面获得了CMake :一个跨平台的开源实用工具,使您可以构建,测试和打包应用程序。


它仍然没有对新手说什么,他伸手去拿IDE。 所有这些都是由于恐惧和对正在发生的事情的误解。 我本人来自Java,因此我很清楚第一次看到pom.xml的人的眼睛是如何扩展的。


让我们弄清楚上次创建项目由什么组成,以及如何在各种不同的IDE中进行构建。


文件组成:



着色器使用D3DCompile函数在运行时直接编译。 DirectX SDK(现在为Windows SDK)中的D3DCompiler可以工作。 不需要IDE来构建它。


main.cpp是唯一要构建的文件。 并使用完全在CMakeLists.txt信息进行收集。


在相反的方向: CMakeLists.txt告诉我们将要编译的内容。 程序集main.cpp已在其中注册。 这足以编译项目。 编译后,将获得一个exe文件,该文件在启动后将收集着色器并将其显示在屏幕上。 一切都非常简单,IDE不在此链中,可以是任何东西。


IDE是可选的。 一般而言。 这里有什么不可理解的?


组装方式


准备时刻


与往常一样,准备工作占据了整个过程的大部分。 有一些事情需要澄清。


假定一切都基于我们上次安装的Msys2 完成 。 如果不是这种情况,您将不得不纠结自己:)


如何安装CMake和Ninja


为了能够收集到一些东西,如果尚未安装,则必须安装CMake。


  • 从站点下载: https : //cmake.org/download 。 我有cmake-3.12.2-win64-x64;
  • 解压缩并将路径添加到Windows环境变量PATH中cmake.exe所在的位置;
  • 从网站下载最新版本的忍者生成器;
  • 打开包装,然后将其放在PATH中的某个位置。

如何编辑路径,以免像布谷鸟一样旅行


第一种方法是众所周知的:赢+暂停->高级系统设置->高级->环境变量。 不幸的是,即使在添加了PATH变量编辑器的Windows 10中,这仍然不是很方便。


如果您经常摆弄PATH,那么使用标准的编辑窗口会很烦人。 我建议您使用Rapid Environment Editor-它是免费的,可以极大地节省您的神经。


如何在开发模式下从MinGW连接DLL


为了启动应用程序,您至少需要mingw64\bin dll文件。


不幸的是,我找不到将库从MinGW扔到PATH的真正方便的解决方案。 如果有些贤哲能在评论中说出来,我将不胜感激。


现在,最简单的方法是将MinGW bin目录直接附加到PATH的第一位。 (对于Visual Studio,您可以简单地将库放到Assembly目录中。)不幸的是,此方法有很多缺点:修改PATH之后,Windows中的某些软件会立即崩溃。 例如,《守望先锋》停止为我工作,这是完全致命的事情。


如果像我一样,您生活在计算机中,而不仅仅是在工作时间打开计算机,则建议采用以下方案:在编程之前将MinGW添加到PATH,然后将其删除。 为了简化此过程,您需要制作两个可以通过双击启动的批处理文件:


before.bat:


 setx path "Z:\msys64\mingw64\bin;%path%" 

after.bat:


 setx PATH "%PATH:Z:\msys64\mingw64\bin;=%" 

如何在测试发布模式下连接DLL


显然,只有当mingw64\bin在PATH中时,即在开发人员的计算机上,才可以使用前一种方法。 即使在那儿,您也不总是要破坏PATH。 如果它启动一个普通人(或在after.bat之后启动我们自己),则类似于:





解决此问题的最简单方法是将必要的dll放在可执行文件旁边。 但是为此,您需要知道使用了哪些dll!


我们已经有一些Microsoft制造的实用程序。


  • 使用ListDLLs可以看到正在运行的应用程序的完整列表,但它不会显示尚未加载的内容。
  • 如果您执行工具-> Visual Studio命令提示符,则dumpbin /dependents "Z:\game\build\Mingw64-Debug\src.exe" ,那么它将仅显示第一级dll。 换句话说,如果仅完成dumpbin告诉您的内容,则在启动后仍然会出现错误-它们仅与其他DLL有关。

为了深入了解依赖关系, 有一个可以直接从命令行执行的脚本 (msys2,cygwin等-足以在其中安装python2 / 3和objdump)。


  • 下载mingw-bundledlls脚本,
  • 放在文件旁边,
  • 在文本编辑器的blacklist = [数组中blacklist = [添加我们的DirectX件: d3d10.dll, d3d11.dll, d3dcompiler_43.dll
  • chmod 755 ./mingw-bundledlls
  • 要查看使用的./mingw-bundledlls ./src.exe./mingw-bundledlls ./src.exe (好吧,您更感兴趣的任何可执行文件),
  • 自动复制并放置下一个: ./mingw-bundledlls --copy ./src.exe
  • 利润:双击exe文件并从Visual Studio像这样启动可执行文件。

仍然有各种棘手的方法来签约CMake来复制dll本身,但是如果您开始研究发行问题,那么您将永远无法完成本文。


手动组装


  • 蝙蝠前
  • 开始->运行-> cmd.exe
  • cd /dz://game/src
  • cmake -G "Ninja" -D EXECUTABLE_OUTPUT_PATH="bin" -D CMAKE_CXX_COMPILER="Z:/msys64/mingw64/bin/g++.exe" -D CMAKE_C_COMPILER="Z:/msys64/mingw64/bin/gcc.exe" .
  • 忍者
  • 立即运行bin中生成的文件,或根据上述说明附加dll,然后执行after.bat

我们已经证明我们完全不依赖于IDE。


在Visual Studio中构建


但是,没有IDE进行开发仍然不是问题。 上一次,我们已经使用CLion编写了一个测试应用程序。 但这是有偿所有权和zashkvar,对吗? 算了 现在只有免费。


在Visual Studio中,必要动作的顺序非常简单。


  • 蝙蝠前
  • 启动Visual Studio;
  • 文件->打开-> CMake;
  • 选择CMakeLists.txt;
  • 可视化工具思考并显示项目一段时间。
  • 主菜单->缓存->生成->项目名称;
  • 我们查看输出并修复错误(例如,我发誓使用CMake版本,我不得不将其降低到3.11而不是3.12);
  • 主菜单-> CMake->更改CMake设置(选择MinGW64-Debug);
  • CMakeSettings.json文件将在项目中自动生成。 我们在此处指示到MinGW的路径(在上一个视频“ Z:\ msys64 \ mingw64”中有此路径),保存文件;
  • 主菜单->缓存->生成-> CMakeLists.txt;
  • 主菜单->缓存->生成->项目名称;
  • 如果一切都正确完成,则带有项目名称的项目将出现在“选择有效的启动项目”菜单中(绿色箭头旁边以启动应用程序)。
  • 我们开始。

与使用控制台一样,您可以直接启动它(记住MinGW在PATH中),也可以执行after.bat并根据说明放置必要的DLL。 DLL需要直接放置在应用程序所在的目录中。 可以在CMakeSettings.json文件的buildRoot参数中指定它。


因此,先生们,最重要的事情是:从Visual Studio中,一切都可以编译并完美运行。 我们已经证明我们不依赖于商业IDE。


在Visual Studio Code中生成


不幸的是,Visual Studio仍然不是专有的封闭源代码软件。 我们需要继续免费一些,这就是Visual Studio Code。


首先有趣的mindfak。 如果您在大型显示器上运行VSCode(例如,我正坐在家里看电视),则VSCode界面会变得一团糟。 为防止这种情况发生,您需要使用--force-device-scale-factor键(使其成为桌面快捷方式或类似名称)来运行它。


不幸的是,我没有掌握VSCode的PATH管理,因此启动它的唯一方法是使用before.bat和另一个技巧修改PATH,我将在下面进行介绍。


接下来,您需要配置VSCode。


  • 安装CMake工具:查看->扩展->在搜索中输入“ CMake Tools”,单击“ vector-of-bool”作者制作的软件包前面的安装。
  • 查看->资源管理器->打开文件夹(选择项目所在的目录);
  • Command Palette(CP,快捷键Ctrl + P)->“> CMake:扫描套件”;
  • 选择我们的“ GCC 8.2.0”,它将指向安装msys2或在其中使用的位置的正确位置;
  • 文件>首选项>设置;
  • 转到用户设置选项卡;
  • 单击面板右上角的三个点,然后从菜单中选择“打开settings.json”;
  • 添加以下选项:

 "cmake.configureOnOpen": true, "terminal.integrated.shell.windows": "D:/msys64/usr/bin/bash.exe", "terminal.integrated.shellArgs.windows": [ "-i" ], "terminal.integrated.env.windows": { "PATH": "/mingw64/bin;/usr/local/bin;/usr/bin;/bin;Z:/msys64/bin/;Z:/msys64/usr/local/bin;Z:/msys64/usr/bin;Z:/msys64/bin;Z:/msys64/mingw64/bin/;%PATH%" }, "cmake.buildDirectory": "${workspaceRoot}/build/${buildType}", "cmake.clearOutputBeforeBuild": true, "cmake.generator": "Ninja", "cmake.cmakePath": "C:\\my\\opt\\cmake-3.12.2-win64-x64\\cmake-3.12.2-win64-x64\\bin\\cmake.exe", "cmake.mingwSearchDirs": [ "Z:/msys64/mingw64", ], "cmake.preferredGenerators": [ "Ninja" ], "cmake.loggingLevel": "debug" 

  • 构建应该自动进行,并且构建将被折叠到build目录中。 如果这没有发生,则需要用鼠标单击Build按钮,并使齿轮位于状态行中。

显然,您需要直接指定mingw和cmake的路径。 “但是我有路径!” 请指出,这将解决所有问题。


但是,有一种不丢弃PATH的独占方法。


  • "cmake.generator": "MSYS Makefiles"
  • "cmake.preferredGenerators": [ "MSYS Makefiles"]
  • 检查MinGW是否不在PATH(after.bat)中;
  • 确认您已删除项目中的构建目录。
  • 启动Msys2控制台;
  • export PATH=/z/msys64/mingw64/bin;$PATH (然后可以在某种"~/.bashrc"输入它)
  • 例如,从中运行VSCode,例如: "C:\Users\olegchir\AppData\Local\Programs\Microsoft VS Code\Code.exe"
  • 然后一切都和以前一样。 该文件应正常生成。
  • 当您尝试通过双击从资源管理器中立即启动它时,会立即导致DLL搜索错误-这意味着一切正确,我们实际上在VSCode中使用了特殊的PATH,但在外部使用了特殊的PATH。

因此,我们证明了,在免费的IDE中,我们也可以自己生活。


总结


总结一下,如果您是普通人,则可以使用CMake,MinGW,而不会吹入胡须。 一切都可以在IDE之间自由移植,一切正常。 我们可以随时使用任何付费,封闭,非免费的IDE,我们将一无所获。 但是其他所有人都会受苦,这是正确的。


以后的文章将考虑您的意见。 在Twitch直播期间,您可以提出问题并在评论中提供建议。 这些文章是否全部取决于您在此评论下弹起箭头的力度。


                  

©亚历山大·雷夫斯基

Source: https://habr.com/ru/post/zh-CN425209/


All Articles