16,471
社区成员
发帖
与我相关
我的任务
分享
#Microsoft SDKs因个人安装的VS路径的不同而不同
!include <C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Include\Win32.Mak>
#设置编译标记,初始化为FALSE
CFGSET = FALSE
RUN_CLEAN = FALSE
!IF "$(option)"== "1"
CFGSET = TRUE
Configuration = Release
Platform = x64
#定义release版本的预处理器
CC_OPTION = -D_WIN64 -D_NDEBUG -D_WINDOWS
TARGET_MACHINE = X64
!ELSE IF "$(option)"== "2"
CFGSET = TRUE
Configuration = Debug
Platform = x64
#定义debug版本的编译选项
CC_OPTION = -D_WIN64 -D_DEBUG -D_WINDOWS /MDd
TARGET_MACHINE = X64
!ELSE IF "$(option)"== "3"
CFGSET = TRUE
Configuration = Release
Platform = Win32
CC_OPTION = -D_WIN32 -D_NDEBUG -D_WINDOWS
TARGET_MACHINE = X86
!ELSE IF "$(option)"== "4"
CFGSET = TRUE
Configuration = Debug
Platform = Win32
CC_OPTION = -D_WIN32 -D_DEBUG -D_WINDOWS /MDd
TARGET_MACHINE = X86
!ELSE IF "$(option)"=="5"
CFGSET=TRUE
RUN_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 <config> 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
影响多大,影响是如何产生的?能不能科普下? 静态链接VC库,会大大增加PE文件的大小,影响运行效率。
静态链接VC库,会大大增加PE文件的大小,影响运行效率。
稍微大型一点的软件,都会带十几个或几十个dll文件,不仅如此,还有各种资源文件。不信你打开QQ文件夹看看。 软件开发还经常用到第三方库,开源的还可以辛苦点把源代码扣出来,不开源的呢? 我以为,不是光秃秃一个主程序就是绿色软件,应该是不依赖于系统环境可以正常工作的软件。简单点说,就是安装完的程序文件夹拷贝到别的电脑可以直接运行的。
没事,动态链接把dll带全了也是绿色软件。主要的区别在于是不是依赖com,依赖注册rpc,或者大量预制注册表。
VSCode了解一下
静态链接VC库的APP,依然是绿色的