博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
windows下编写绿色软件的设想
阅读量:2430 次
发布时间:2019-05-10

本文共 4184 字,大约阅读时间需要 13 分钟。

作者:朱金灿

来源:

一.什么是绿色软件

  我设想过一些简单实用的工具,比如解压缩工具、图像浏览器之类本身就不应该通过安装包来安装。就是说一些简单的工具应该把运行文件下载下来就能用的,而不应该通过安装包来安装。在这里最典型的例子就是微软出品的depends软件,它就只有一个depends.exe,无论你把这个depends.exe拷贝到windows xp、windows 7还是windows 10上(无论是32位系统还是64位系统),它都能直接运行。它是怎么做到的,我试着研究了一番。我用depends打开depends.exe,看看它的依赖库是什么,如下图:

在这里插入图片描述

可以看出它依赖的都是windows系统库。我们再看看一些需要安装包的软件如Adobe Audition 3.0的库依赖情况,如下图:

在这里插入图片描述

可以看到除了依赖windows系统库,还依赖于vc的运行时库。我们知道vc的运行时库是分不同版本的,如上图的Audition 3.0依赖的就是VC 2003的运行时库。

  比较二者我们可以得出一个结论:是否依赖于vc运行时库是绿色软件和非绿色软件的一大区别。

二.如何开发绿色软件

  那么问题来了:如何开发绿色软件。这个问题其实应该是如何在编译软件时去除软件对vc运行时库的依赖。我曾经试验过使用VS编译VC工程是无法去除VC运行时库的依赖的。我摸索了一种办法,就是使用makefile编译C/C++代码是可以去除对vc运行时库的依赖。下面是一段示例makefile脚本:

#Microsoft SDKs因个人安装的VS路径的不同而不同!include 
#设置编译标记,初始化为FALSECFGSET = FALSERUN_CLEAN = FALSE!IF "$(option)"== "1"CFGSET = TRUEConfiguration = ReleasePlatform = x64#定义release版本的预处理器CC_OPTION = -D_WIN64 -D_NDEBUG -D_WINDOWSTARGET_MACHINE = X64!ELSE IF "$(option)"== "2"CFGSET = TRUEConfiguration = DebugPlatform = x64#定义debug版本的编译选项CC_OPTION = -D_WIN64 -D_DEBUG -D_WINDOWS /MDdTARGET_MACHINE = X64!ELSE IF "$(option)"== "3"CFGSET = TRUEConfiguration = ReleasePlatform = Win32CC_OPTION = -D_WIN32 -D_NDEBUG -D_WINDOWSTARGET_MACHINE = X86!ELSE IF "$(option)"== "4"CFGSET = TRUEConfiguration = DebugPlatform = Win32CC_OPTION = -D_WIN32 -D_DEBUG -D_WINDOWS /MDdTARGET_MACHINE = X86!ELSE IF "$(option)"=="5"CFGSET=TRUERUN_CLEAN=TRUE!ENDIF CC = $(CC_OPTION) # 提示用法!IF "$(CFGSET)"== "FALSE"!MESSAGE Usage: nmake /f makefile.vc option=1 or 2 or 3 or 4 or 5 !MESSAGE!MESSAGE where
is one of:!MESSAGE - option=1 - build x64 release version!MESSAGE - option=2 - build x64 debug version!MESSAGE - option=3 - build x86 release version!MESSAGE - option=4 - build x86 debug version!MESSAGE - option=5 - clear output file!MESSAGE!MESSAGE!ERROR please choose a valid configuration instead"!ENDIF#假如运行清理命令!IF "$(RUN_CLEAN)" == "TRUE"CLEAN: if exist "..\..\Intdir\Debug_x64\FileSplitAndMerge" (del "..\..\Intdir\Debug_x64\FileSplitAndMerge\*.obj") else echo Debug_x64 not exist if exist "..\..\Intdir\Debug_Win32\FileSplitAndMerge" (del "..\..\Intdir\Debug_Win32\FileSplitAndMerge\*.obj") else echo Debug_Win32 not exist if exist "..\..\Intdir\Release_x64\FileSplitAndMerge" (del "..\..\Intdir\Release_x64\FileSplitAndMerge\*.obj") else echo Release_x64 not exist if exist "..\..\Intdir\Release_Win32\FileSplitAndMerge" (del "..\..\Intdir\Release_Win32\FileSplitAndMerge\*.obj") else echo Release_Win32 not exist!ELSE#设置输出文件夹和临时目录文件夹OUTDIR =..\..\OutDir\$(Configuration)_$(Platform)INDIR =..\..\Intdir\$(Configuration)_$(Platform)\FileSplitAndMerge#设置所有输出all: $(INDIR) $(OUTDIR) $(OUTDIR)\FileSplitAndMerge.exe#假如不存在$(INDIR)文件夹,就创建它$(INDIR) : if not exist "$(INDIR)" mkdir $(INDIR)#假如不存在$(OUTDIR)文件夹,就创建它$(OUTDIR) : if not exist "$(OUTDIR)" mkdir $(OUTDIR)#编译资源脚本$(INDIR)\Resource.res:.\Resource.rc rc.exe /n /v /fo $(INDIR)\Resource.res .\Resource.rc#编译源码$(INDIR)\splitFile.obj:.\splitFile.c cl -c $(CC) /Fo"$(INDIR)\\" /Fd"$(INDIR)\\" .\splitFile.c$(INDIR)\mergeFile.obj:.\mergeFile.c cl -c $(CC) /Fo"$(INDIR)\\" /Fd"$(INDIR)\\" .\mergeFile.c$(INDIR)\Progress.obj:.\Progress.c cl -c $(CC) /Fo"$(INDIR)\\" /Fd"$(INDIR)\\" .\Progress.c$(INDIR)\mainDlg.obj:.\mainDlg.c $(INDIR)\splitFile.obj $(INDIR)\mergeFile.obj $(INDIR)\Resource.res $(INDIR)\Progress.obj cl -c $(CC) /Fo"$(INDIR)\\" /Fd"$(INDIR)\\" .\mainDlg.c#链接$(OUTDIR)\FileSplitAndMerge.exe: $(INDIR)\mainDlg.obj link /machine:$(TARGET_MACHINE) /INCREMENTAL:YES /NOLOGO /subsystem:windows /out:$(OUTDIR)\FileSplitAndMerge.exe $(INDIR)\splitFile.obj $(INDIR)\mergeFile.obj $(INDIR)\Progress.obj $(INDIR)\mainDlg.obj $(INDIR)\Resource.res kernel32.lib user32.lib gdi32.lib comdlg32.lib Shell32.lib!ENDIF

三.构建绿色版VS的设想

  如果我们再将思路扩展一下,我们可以组装一个绿色版的VS。一个精简版的VS实际上是由windows SDK、代码编辑器、资源脚本编辑器、编译器、链接器和调试器组成的。windows SDK实际上是一堆头文件和库文件,可以单独抽取出来,代码编辑器可以用文本编辑器,资源脚本编辑器可以用ResEd (Resource Editor)代替,编译器、链接器可以从安装版的VS中抽取出来,调试器可以用windbg代替VS的调试器。上面提到的各种替代品都是绿色软件。文本编辑器用来编写代码,使用makefile编译代码,使用windbg调试代码,这样就不用安装庞大的VisualStudio,每次编写代码时也不用启动庞大的VisualStudio。

转载地址:http://yonmb.baihongyu.com/

你可能感兴趣的文章
阿里技术人的成长路径是什么?
查看>>
你值得拥有!更省钱地完成数据监听
查看>>
漫画 | TCP,一个悲伤的故事
查看>>
张一鸣无圈胜破圈?
查看>>
抓紧!抓紧!CSDN年终重榜福利来了~人手一份,快来投稿!!
查看>>
干货! AI 推断解决方案栈 Vitis AI 全流程独家解析
查看>>
真相了 | 敲代码时,程序员戴耳机究竟在听什么?
查看>>
回首互联网十年,我们能从八次烧钱大战中学到什么
查看>>
漫画:如何辨别二逼互联网公司!?
查看>>
麒麟信安面向场景化创新,赋能openEuler商业验证
查看>>
王者又连跪了?快让 AI 帮你上分!
查看>>
1 分钟带你认识从 "�" 到 "锟斤拷"
查看>>
3 年培养 10 万“码农”,郑州推出“码农计划”
查看>>
一个三本程序猿的大厂逆袭之路
查看>>
程序员弃码投中医?还做成了不错的生意! | 极客视频
查看>>
百度一 29 岁程序员因“篡改数据”被抓
查看>>
去年我年薪 30W,今年我一天做 3 顿饭
查看>>
入职大厂,我容易吗?
查看>>
《互联网人退化简史》
查看>>
CTO 写的低级 Bug 再致网站被黑,CEO 的号都被盗了!
查看>>