一、准备工作(perl, nasm, cygwin)

工作需要,我要以(x86 | x64) - (static | shared) - (debug | release)选项编译openssl,最终得到8个版本:

下载安装vs2019,去github下载openssl源码,这两步不介绍。。。

安装perl, nasm, cygwin:

http://strawberryperl.com/
https://www.nasm.us
https://www.cygwin.com/

安装perl只需一路下一步,nasm需要在安装成功后自行添加环境变量,确保perl和nasm命令在cmd中可用,只需 perl --help 和 nasm --help 验证一下即可。

cygwin稍微麻烦一点,除了 cygwin 本身,还需要安装3个命令行工具:p7zip, md5sum, patch

方法有很多,命令行应该可以下载,但是我喜欢图形界面,下面简单介绍一下方法,首先需要安装
setup-x86_64.exe,安装成功后桌面应该会有一个快捷方式:

不用管这个,我们再次运行安装程序 setup-x86_64.exe,再次进入安装界面:

一路下一步直到来到这个界面:

view 这里选择 full,然后在 search 里搜索这三个工具,其中md5sum 是默认伴随 cygwin 安装的,另外两个需要我们自己装,操作过程如下图:

大概就是这样,选择最新版本,然后一路下一步就行了。

二、准备脚本

https://www.npcglib.org/~stathis/blog/precompiled-openssl/

这个网站提供openssl预编译版本,但是最高只到vs2017和openssl 1.1.0,我需要 vs2019和openssl 1.1.1,但是没关系,网站提供了编译脚本:

接下来只需要把批处理脚本和 patch 文件下下来,自己修改就行了,其实你不用往下看了。

不过,为了避免我以后忘掉了,我这里还是记录一下步骤。

他提供了批处理,还有一个 patch ,其实 patch可有可无,它是用来修改代码,加上编译参数的。我自己修改了批处理,删减了一些代码和注释,您只需要修改一下里面一下路径,应该就能直接用了。如果我这个脚本在你这不能工作,建议你直接去提供脚本的网站下载,然后自行修改。

直接运行脚本:

build-openssl-1.1.0k.bat build all

然后睡个觉,睡醒就编译好了。

三、脚本代码

你需要修改里面的一些版本号和路径。

@echo off
SETLOCAL EnableExtensions EnableDelayedExpansion:: VS 版本
SET VS_VERSION=2019:: VS VC 路径
SET VISUAL_STUDIO_VC=C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC:: Set CYGWIN_DIR to the location of your Cygwin root ( one level up from /bin )
:: Make sure you install the following cygwin packages: p7zip, md5sum, patchSET CYGWIN_DIR=C:\cygwin64SET PERL_ROOT=C:\Strawberry\perl\binrem ========================================================================================================SET SEVENZIP_CMD=7zSET MD5SUM_CMD=md5sumSET DATE_CMD=dateSET PATCH_CMD=patchSET DOS2UNIX_CMD=dos2unixrem ========================================================================================================SET BUILD_PROJECT=opensslSET PROJECT_VERSION=1.1.0k:: 这里需要改为你自己的路径
SET PROJECT_SRC_DIR=C:\Users\Pig\Desktop\openssl-OpenSSL_1_1_1k
SET PROJECT_BUILD_DIR=C:\Users\Pig\Desktop\openssl-OpenSSL_1_1_1k\build
SET PROJECT_INSTALL_DIR=C:\Users\Pig\Desktop\openssl-OpenSSL_1_1_1k\installrem ========================================================================================================
rem == PLEASE DO NOT EDIT BELOW THIS LINE
rem ========================================================================================================rem We load the config file first
call :loadconfig "%~dpn0"rem we then carry on execution
call :execScript %0 %1 %2 %3 %4ENDLOCAL@exit /B 0rem ========================================================================================================
rem == Pseudo-function to load config
rem ========================================================================================================:loadconfig
rem set the variable HOSTNAME by executing the command (that's the computer's name)
FOR /F "delims=" %%a IN ('hostname') DO @set HOSTNAME=%%arem strip double quotes
set scriptFile=%1
set scriptFile=%scriptFile:"=%rem We use two files: myScript.conf and myScript.<HOSTNAME>
rem myScript.<HOSTNAME> overrides myScript.conf
rem %~dpn0 is the full file minus the extension.
FOR %%c IN ("!scriptFile!.conf""!scriptFile!.!HOSTNAME!"
) DO (IF EXIST "%%c" (ECHO.ECHO # Loading local configuration from: %%cECHO.FOR /F "usebackq delims=" %%v IN (%%c) DO (set %%v))
)GOTO :eofrem ========================================================================================================:execScript
rem Use this pseudo-function to write the code of your main script
SETLOCAL EnableExtensions EnableDelayedExpansionSET scriptName=%1
SET arg[0]=%2
SET arg[1]=%3
SET arg[2]=%4
SET arg[3]=%5:: ATTENTION: this is down here because out-of-source builds are not supported DO NOT CHANGE IT!
:: SET PROJECT_BUILD_DIR=!PROJECT_SRC_DIR!\buildIF "!SEVENZIP_CMD_OPTIONS!" == "" (SET SEVENZIP_CMD_OPTIONS=a -r -mx9
)FOR /F "delims=" %%a IN ('!CYGWIN_DIR!/bin/cygpath -p -u !SEVENZIP_CMD!') DO @set __SEVENZIP_CMD=%%aIF "!arg[0]!" == "" GOTO usage
IF NOT EXIST "!PROJECT_SRC_DIR!" (ECHO.CALL :exitB "ERROR: Source directory !PROJECT_SRC_DIR! does not exist or does not contain the !BUILD_PROJECT! sources. Aborting."GOTO :eof
)IF "!VS_VERSION!" == "2019" (SET VISUAL_STUDIO_VC=!VISUAL_STUDIO_VC!\Auxiliary\Buildpushd "!VISUAL_STUDIO_VC!\..\..\..\Common7\Tools\"call "!VISUAL_STUDIO_VC!\..\..\..\Common7\Tools\vsdevcmd.bat" -clean_envpopd
)IF NOT EXIST "!VISUAL_STUDIO_VC!\vcvarsall.bat" (ECHO.CALL :exitB "ERROR: !VISUAL_STUDIO_VC!\vcvarsall.bat does not exist. Aborting."GOTO :eof
)IF "!DATE_CMD_OPTIONS!" == "" (SET DATE_CMD_OPTIONS=%%d %%b %%Y
)SET argC=-1
FOR %%x in (%*) DO SET /A argC+=1if /i "!arg[0]!" == "build" (if !argC! == 2 (if /i "!arg[1]!" == "all" (echo.echo You are about to build all permutations [x86^|x64] [static^|shared] [debug^|release]echo.timeout /t 5call :buildallgoto :eof) else (goto usage)) else if !argC! == 4 (call :callArch !arg[1]! !arg[2]! !arg[3]!goto :eof) else (goto usage)) else if /i "!arg[0]!" == "package" (if !argC! == 2 (if /i "!arg[1]!" == "all" (echo.echo You are about to package all permutations [x86^|x64] [static^|shared] [debug^|release]echo.timeout /t 5call :createPackagegoto :eof) else (goto usage)) else if !argC! == 3 (echo.echo This feature is currently unsupported. Only "package all" is supported at this time.echo.goto usageREM set archGood=falseREM if /i "!arg[1]!" == "x86" set archGood=trueREM if /i "!arg[1]!" == "x64" set archGood=trueREM if /i "!archGood!" == "true" (REM call :createPackage !arg[0]! !arg[1]!REM goto :eofREM ) else (REM goto usageREM )) else (goto usage)) else if /i "!arg[0]!" == "patch" (call :patch !PROJECT_VERSION!
) else if /i "!arg[0]!" == "unpatch" (call :unpatch !PROJECT_VERSION!
) else if !argC! == 3 (call :callArch !arg[0]! !arg[1]! !arg[2]!GOTO :eof
) else (GOTO usage
)ENDLOCAL
GOTO :eofrem ========================================================================================================
:printConfiguration
SETLOCAL EnableExtensions EnableDelayedExpansion
SET PATH=!CYGWIN_DIR!\bin;!CYGWIN_DIR!\usr\bin;!PATH!echo.
echo                    PATH: !PATH!
echo.echo              VS_VERSION: !VS_VERSION!
echo        VISUAL_STUDIO_VC: !VISUAL_STUDIO_VC!
echo              CYGWIN_DIR: !CYGWIN_DIR!
echo.
bash -c "echo -n \"           SEVENZIP_CMD: \" & which !__SEVENZIP_CMD!"
echo    SEVENZIP_CMD_OPTIONS: !SEVENZIP_CMD_OPTIONS!
bash -c "echo -n \"             MD5SUM_CMD: \" & which !MD5SUM_CMD!"
bash -c "echo -n \"               DATE_CMD: \" & which !DATE_CMD!"
bash -c "echo -n \"              PATCH_CMD: \" & which !PATCH_CMD!"
echo.
echo           BUILD_PROJECT: !BUILD_PROJECT!
echo         PROJECT_VERSION: !PROJECT_VERSION!
echo         PROJECT_SRC_DIR: !PROJECT_SRC_DIR!
echo       PROJECT_BUILD_DIR: !PROJECT_BUILD_DIR!
echo     PROJECT_INSTALL_DIR: !PROJECT_INSTALL_DIR!
ENDLOCAL
goto :eofrem ========================================================================================================:callArch
set archGood=false
if /i "%1" == "x86" set archGood=true
if /i "%1" == "x64" set archGood=true
if /i "!archGood!" == "true" (set linkGood=falseif /i "%2"=="static" set linkGood=trueif /i "%2"=="shared" set linkGood=trueif /i "!linkGood!" == "true" (set buildGood=falseif /i "%3" == "debug" set buildGood=trueif /i "%3" == "release" set buildGood=trueif /i "!buildGood!" == "true" (call :build %1 %2 %3goto :eof)))
goto usage
goto :eofrem ========================================================================================================:usage
call :printConfiguration
ECHO:
ECHO Error in script usage. The correct usage is:
ECHO:
ECHO     !scriptName! [patch^|unpatch] - apply/remove patches to the sources
ECHO     !scriptName! build [all^|x86^|x64] ^<[static^|shared] [debug^|release]^> - builds all or specific permutations
ECHO     !scriptName! package [all^|x86^|x64] ^<[static^|shared]^> - creates a package file
ECHO:
GOTO :eofrem ========================================================================================================:unpatch
rem remove patches from the sources
call :patch %1 unpatch
goto :eof:patch
rem patch sources
::
:: To create a patch for mkdef.pl:
:: $ diff -u "F:\openssl-1.0.1e-orig\util\mk1mf.pl" "F:\openssl-1.0.1e\util\mk1mf.pl" > "%SSBUILDER_ROOT%\misc\openssl-1.0.1e-mk1mf.pl.patch"
:: $ diff -u "F:\openssl-1.0.1e-orig\util\mkdef.pl" "F:\openssl-1.0.1e\util\mkdef.pl" > "%SSBUILDER_ROOT%\misc\openssl-1.0.1e-mkdef.pl.patch"
:: $ diff -u "F:\openssl-1.0.1e-orig\util\pl\VC-32.pl" "F:\openssl-1.0.1e\util\pl\VC-32.pl" > "%SSBUILDER_ROOT%\misc\openssl-1.0.1e-VC-32.pl.patch"
::
:: To apply the patch:
::   cd into the unmodified openssl-x.x.x source directory
::   patch [--dry-run] -p2 -i "D:\dev\ssbuilder\misc\openssl-1.0.1e-mkdef.pl.patch"
::   patch [--dry-run] -p2 -i "D:\dev\ssbuilder\misc\openssl-1.0.1e-mkdef.pl.patch"
::
SETLOCAL EnableExtensions EnableDelayedExpansionif /i "%2" == "unpatch" (SET EXTRA_TEXT=RemovingSET EXTRA_FLAGS=-R
) else (SET EXTRA_TEXT=Applying
)SET PATH=!CYGWIN_DIR!\bin;!CYGWIN_DIR!\usr\bin;SET CYGWIN=nodosfilewarningECHO.
ECHO !EXTRA_TEXT! patches to [!BUILD_PROJECT! v%~1] sources
ECHO.pushd "!PROJECT_SRC_DIR!"call :applyPatch !BUILD_PROJECT!-%~1.patchpopdENDLOCAL
goto :eof:applyPatch
SET PATCH_FILE=%~dp0
SET PATCH_FILE=!PATCH_FILE!%1IF NOT EXIST "!PATCH_FILE!" (call :exitB "Patch: [!PATCH_FILE!] does not exist. Aborting.") ELSE (!DOS2UNIX_CMD! "!PATCH_FILE!"!PATCH_CMD! --binary !EXTRA_FLAGS! -N -p1 -i "!PATCH_FILE!")
goto :eofrem ========================================================================================================:createPackagecall :printConfigurationecho:
echo Packaging OpenSSL Library
echo:SET DIST_DIR=!PROJECT_INSTALL_DIR!\!BUILD_PROJECT!-!PROJECT_VERSION!-vs!VS_VERSION!echo !DIST_DIR!@mkdir !DIST_DIR!\bin 2>nul
@mkdir !DIST_DIR!\bin64 2>nul
@mkdir !DIST_DIR!\lib 2>nul
@mkdir !DIST_DIR!\lib64 2>nul
@mkdir !DIST_DIR!\include 2>nul
@mkdir !DIST_DIR!\include64 2>nul
@mkdir !DIST_DIR!\ssl 2>nul
@mkdir !DIST_DIR!\logs 2>nulcall :packagetypeecho:ENDLOCAL
@exit /B 0rem ========================================================================================================:: %1 library type (e.g. static)
:packagetypeSET DST_DIST=!BUILD_PROJECT!-!PROJECT_VERSION!-vs!VS_VERSION!
SET DST_DIST_DIR=!PROJECT_INSTALL_DIR!\!DST_DIST!for %%l in (static shared) do (for %%a in (x86 x64) do (if /i "%%a" == "x86" (SET BITS=32SET BITSTR=) else (SET BITS=64SET BITSTR=!BITS!SET PREFIX_WIN=!PREFIX_WIN!!BITS!)for %%b in (debug release) do (SET __ARCH=%%aSET __BUILD=%%bSET __LINK=%%lSET SRC_DIST_DIR=!PROJECT_INSTALL_DIR!\!BUILD_PROJECT!-!__ARCH!-!__LINK!-!__BUILD!-vs!VS_VERSION!echo [copy] !SRC_DIST_DIR! =^> !DST_DIST_DIR!if exist "!SRC_DIST_DIR!" (xcopy /Q /Y !SRC_DIST_DIR!\bin\*.dll !DST_DIST_DIR!\bin!BITSTR!\xcopy /Q /Y !SRC_DIST_DIR!\bin\*.lib !DST_DIST_DIR!\bin!BITSTR!\xcopy /Q /Y !SRC_DIST_DIR!\bin\*.pdb !DST_DIST_DIR!\bin!BITSTR!\xcopy /Q /Y !SRC_DIST_DIR!\bin\*.exe !DST_DIST_DIR!\bin!BITSTR!\xcopy /Q /Y !SRC_DIST_DIR!\lib\*.lib !DST_DIST_DIR!\lib!BITSTR!\xcopy /Q /Y !SRC_DIST_DIR!\lib\*.pdb !DST_DIST_DIR!\lib!BITSTR!\xcopy /Q /Y /E /I !SRC_DIST_DIR!\include !DST_DIST_DIR!\include!BITSTR!xcopy /Q /Y /E /I !SRC_DIST_DIR!\ssl !DST_DIST_DIR!\sslxcopy /Q /Y /E /I !SRC_DIST_DIR!\html !DST_DIST_DIR!\htmlxcopy /Q /Y /E /I !SRC_DIST_DIR!\logs !DST_DIST_DIR!\logs)))
)echo Copied all files for: !BUILD_PROJECT! v!PROJECT_VERSION!set README=!DST_DIST_DIR!\readme.precompiled.txt
echo !README!pushd !PROJECT_INSTALL_DIR!SETLOCAL EnableExtensions EnableDelayedExpansionSET PATH=!CYGWIN_DIR!\bin;!CYGWIN_DIR!\usr\bin;!PATH!echo. > !README!bash -c "!DATE_CMD! +\"!DATE_CMD_OPTIONS!\"" >> !README!echo ====================================================================================================================== >> !README! echo  url: http://www.npcglib.org/~stathis/blog/precompiled-openssl >> !README!   echo ====================================================================================================================== >> !README!echo These are custom pre-built OpenSSL Libraries v!PROJECT_VERSION! (http://www.openssl.org). >> !README!echo They are compiled with Cygwin/MSVC for 32/64-bit Windows, using Visual Studio !VS_VERSION!. >> !README!echo. >> !README!echo Please note that the OpenSSL Project (http://www.openssl.org) is the only official source of OpenSSL. >> !README!echo These builds are created for my own personal use and therefore you are utilizing them at your own risk. >> !README!echo My builds are unsupported and not endorsed by The OpenSSL Project. >> !README!echo. >> !README!echo I build these in the context of my own work and spare time,  >> !README!echo I do NOT charge any money, I do NOT make any money ... and NO I do NOT accept any donations^^! >> !README!echo If you really like OpenSSL, if it has helped you or your company in any way, >> !README!echo or you are feeling like giving back anyway, then please  >> !README!echo donate directly to the OpenSSL Project: https://www.openssl.org/support/donations.html >> !README!echo The developers and countless contributors deserve it^^!  >> !README!echo. >> !README!echo ------------------------------------------------------------------------------ >> !README!echo 32-bit OpenSSL Libraries [shared] [runtime: dynamic (/MD)]]>> !README!echo ------------------------------------------------------------------------------ >> !README!echo release runtime dlls: bin\libcryptoMD.dll bin\libsslMD.dll >> !README!echo  release import libs: lib\libcryptoMD.lib lib\libsslMD.lib >> !README!    echo   debug runtime dlls: bin\libcryptoMDd.dll bin\libsslMDd.dll >> !README!echo    debug import libs: lib\libcryptoMDd.lib lib\libsslMDd.lib >> !README!echo. >> !README!echo ------------------------------------------------------------------------------ >> !README!echo 32-bit OpenSSL Libraries [static] [runtime: static (/MT)]]>> !README!echo ------------------------------------------------------------------------------ >> !README!echo         release libs: lib\libcryptoMT.lib lib\libsslMT.lib >> !README!    echo           debug libs: lib\libcryptoMTd.lib lib\libsslMTd.lib >> !README! echo. >> !README!echo ------------------------------------------------------------------------------ >> !README!echo 64-bit OpenSSL Libraries [shared] [runtime: dynamic (/MD)]]>> !README!echo ------------------------------------------------------------------------------ >> !README!echo release runtime dlls: bin64\libcryptoMD.dll bin64\libsslMD.dll >> !README!echo  release import libs: lib64\libcryptoMD.lib lib64\libsslMD.lib >> !README!    echo   debug runtime dlls: bin64\libcryptoMDd.dll bin64\libsslMDd.dll >> !README!echo    debug import libs: lib64\libcryptoMDd.lib lib64\libsslMDd.lib >> !README!echo. >> !README!echo ------------------------------------------------------------------------------ >> !README!echo 64-bit OpenSSL Libraries [static] [runtime: static (/MT)]]>> !README!echo ------------------------------------------------------------------------------ >> !README!echo         release libs: lib64\libcryptoMT.lib lib64\libsslMT.lib >> !README!    echo           debug libs: lib64\libcryptoMTd.lib lib64\libsslMTd.lib >> !README! echo. >> !README!echo ====================================================================================================================== >> !README!echo. >> !README!echo If you have any comments or problems send me an email at: >> !README!echo stathis ^<stathis@npcglib.org^> >> !README!bash -c "cp -f \"!PROJECT_SRC_DIR!\AUTHORS\" \"!DST_DIST_DIR!\AUTHORS.txt\""bash -c "cp -f \"!PROJECT_SRC_DIR!\ACKNOWLEDGEMENTS\" \"!DST_DIST_DIR!\ACKNOWLEDGEMENTS.txt\""bash -c "cp -f \"!PROJECT_SRC_DIR!\CHANGES\" \"!DST_DIST_DIR!\CHANGES.txt\""bash -c "cp -f \"!PROJECT_SRC_DIR!\CONTRIBUTING\" \"!DST_DIST_DIR!\CONTRIBUTING.txt\""bash -c "cp -f \"!PROJECT_SRC_DIR!\README\" \"!DST_DIST_DIR!\README.txt\""bash -c "cp -f \"!PROJECT_SRC_DIR!\README.ECC\" \"!DST_DIST_DIR!\README.ECC.txt\""bash -c "cp -f \"!PROJECT_SRC_DIR!\FAQ\" \"!DST_DIST_DIR!\FAQ.txt\""bash -c "cp -f \"!PROJECT_SRC_DIR!\NEWS\" \"!DST_DIST_DIR!\NEWS.txt\""bash -c "cp -f \"!PROJECT_SRC_DIR!\NOTES.WIN\" \"!DST_DIST_DIR!\NOTES.WIN.txt\""bash -c "cp -f \"!PROJECT_SRC_DIR!\LICENSE\" \"!DST_DIST_DIR!\LICENSE.txt\""bash -c "cp -f \"!PROJECT_SRC_DIR!\FAQ\" \"!DST_DIST_DIR!\FAQ.txt\""set __FILENAME=!DST_DIST!set COMPRESSED_FILE=!__FILENAME!.7zecho.echo Packaging !BUILD_PROJECT! Library [v!PROJECT_VERSION!]echo ----------------------------------------------------------------------------echo [     Build in: !PROJECT_BUILD_DIR!] echo [ Installation: !PROJECT_INSTALL_DIR!] echo [    Packaging: !PROJECT_INSTALL_DIR!]echo [   Compressed: !COMPRESSED_FILE!]echo [       Readme: !README!]echo ----------------------------------------------------------------------------echo.echo Compressing with: !__SEVENZIP_CMD! !SEVENZIP_CMD_OPTIONS! !COMPRESSED_FILE! !DST_DIST!bash -c "!__SEVENZIP_CMD! !SEVENZIP_CMD_OPTIONS! !COMPRESSED_FILE! !DST_DIST!" echo Compressing in: !COMPRESSED_FILE!IF EXIST !COMPRESSED_FILE! (for %%I in (!COMPRESSED_FILE!) do (SET /A _fsize=%%~zI / 1024 / 1024)!MD5SUM_CMD! !COMPRESSED_FILE! 1> !__FILENAME!.md5echo Generated md5sum !__FILENAME!.md5 [!_fsize!MB])ENDLOCALpopdgoto :eofrem ========================================================================================================:buildallfor %%a in (x86 x64) do (for %%l in (shared static) do (for %%b in (debug release) do (call :build %%a %%l %%b))
)goto :eofrem ========================================================================================================:: call :build <x86|x64> <static|shared> <debug|release>
:build
SET __ARCH=%~1
SET __LINK=%~2
SET __BUILD=%~3if /i "!__ARCH!" == "x86" (SET BITS=32SET BIT_STR=
) else (SET BITS=64SET BIT_STR=64
)echo:
echo Building OpenSSL Library [!__ARCH!] [!__LINK!] [!__BUILD!]
echo:SETLOCAL EnableExtensions EnableDelayedExpansionIF "!VS_VERSION!" == "2019" (pushd "!VISUAL_STUDIO_VC!\..\..\..\Common7\Tools\"call "!VISUAL_STUDIO_VC!\..\..\..\Common7\Tools\vsdevcmd.bat" -clean_envpopd)call "!VISUAL_STUDIO_VC!\vcvarsall.bat" !__ARCH!rem Place the linker and compiler of Visual Studio infront of any other binaries when searchingrem SET PATH=!PATH!;!CYGWIN_DIR!\bin;!CYGWIN_DIR!\usr\bin;call :printConfigurationcall :buildtype !__ARCH! !__LINK! !__BUILD!ENDLOCAL
goto :eofrem ========================================================================================================:: call :build <x86|x64> <static|shared> <debug|release>
:buildtype
SET __ARCH=%~1
SET __LINK=%~2
SET __BUILD=%~3SET CYGWIN=nodosfilewarningif /i "!__ARCH!" == "x86" (SET BITS=32SET BIT_STR=
) else (SET BITS=64SET BIT_STR=64
)IF NOT EXIST "!PROJECT_BUILD_DIR!" (mkdir "!PROJECT_BUILD_DIR!"
)SET RUNTIME_SUFFIX=
if /i "!__LINK!" == "shared" (SET RUNTIME_SUFFIX=MD
)if /i "!__LINK!" == "static" (SET RUNTIME_SUFFIX=MT
)SET LIBSUFFIX=
if /i "!__BUILD!" == "debug" (SET LIBSUFFIX=d
)SET RUNTIME_FULL_SUFFIX=!RUNTIME_SUFFIX!!LIBSUFFIX!SET DLL_STR=
if /i "!__LINK!" == "shared" (SET DLL_STR=dll
)SET INSTALL_DIR=!PROJECT_INSTALL_DIR!\!BUILD_PROJECT!-!__ARCH!-!__LINK!-!__BUILD!-vs!VS_VERSION!SET B_CMD=perl !PROJECT_SRC_DIR!\Configure
SET COMMON_OPTIONS=enable-static-engine --prefix=!INSTALL_DIR! --openssldir=./ssl
SET MODE=VC-WINif /i "!__LINK!" == "shared" (SET COMMON_OPTIONS=!COMMON_OPTIONS! shared
)if /i "!__LINK!" == "static" (SET COMMON_OPTIONS=!COMMON_OPTIONS! no-shared -static
)if /i "!__BUILD!" == "debug" (SET MODE=!__BUILD!-!MODE!
)if /i "!__ARCH!" == "x86" (SET MODE=!MODE!!BITS!SET COMMON_OPTIONS=!COMMON_OPTIONS! no-asm
) else (SET MODE=!MODE!!BITS!ASET COMMON_OPTIONS=!COMMON_OPTIONS! no-asm
)SET BUILD_DIR=!PROJECT_BUILD_DIR!\!BUILD_PROJECT!-!__ARCH!-!__LINK!-!__BUILD!-vs!VS_VERSION!IF NOT EXIST "!BUILD_DIR!" (mkdir "!BUILD_DIR!"
)SET CONFIG_LOG_FILE=!BUILD_DIR!\!BUILD_PROJECT!-!__ARCH!-!__LINK!-!__BUILD!-vs!VS_VERSION!.config.log
SET BUILD_LOG_FILE=!BUILD_DIR!\!BUILD_PROJECT!-!__ARCH!-!__LINK!-!__BUILD!-vs!VS_VERSION!.build.log
SET TEST_LOG_FILE=!BUILD_DIR!\!BUILD_PROJECT!-!__ARCH!-!__LINK!-!__BUILD!-vs!VS_VERSION!.test.log
SET INSTALL_LOG_FILE=!BUILD_DIR!\!BUILD_PROJECT!-!__ARCH!-!__LINK!-!__BUILD!-vs!VS_VERSION!.install.logECHO. > !CONFIG_LOG_FILE!SET B_CMD=!B_CMD! !MODE! !COMMON_OPTIONS! echo Commands: !B_CMD!timeout /t 10rem pushd !PROJECT_SRC_DIR!
pushd !BUILD_DIR!
echo Configured with: !B_CMD! > !CONFIG_LOG_FILE! 2>&1
!B_CMD! >> !CONFIG_LOG_FILE! 2>&1SET MK_CMD=nmakeECHO. > !BUILD_LOG_FILE!!MK_CMD! > !BUILD_LOG_FILE! 2>&1
rem !MK_CMD! list-tests > !TEST_LOG_FILE! 2>&1
!MK_CMD! test >> !TEST_LOG_FILE! 2>&1IF NOT EXIST "!INSTALL_DIR!" (mkdir "!INSTALL_DIR!"
)rem !MK_CMD! DESTDIR=!INSTALL_DIR! install >> !INSTALL_LOG_FILE! 2>&1
!MK_CMD! install_sw >> !INSTALL_LOG_FILE! 2>&1rem Install the OpenSSL configuration dir (./ssl)
!MK_CMD! install_ssldirs >> !INSTALL_LOG_FILE! 2>&1rem Install the OpenSSL documentation dir (./html)
!MK_CMD! install_html_docs >> !INSTALL_LOG_FILE! 2>&1IF NOT EXIST "!INSTALL_DIR!\logs" (mkdir "!INSTALL_DIR!\logs"
)xcopy /Q /Y !CONFIG_LOG_FILE! !INSTALL_DIR!\logs\ >> !INSTALL_LOG_FILE! 2>&1
xcopy /Q /Y !BUILD_LOG_FILE! !INSTALL_DIR!\logs\ >> !INSTALL_LOG_FILE! 2>&1
xcopy /Q /Y !TEST_LOG_FILE! !INSTALL_DIR!\logs\ >> !INSTALL_LOG_FILE! 2>&1
xcopy /Q /Y !INSTALL_LOG_FILE! !INSTALL_DIR!\logs\ >> !INSTALL_LOG_FILE! 2>&1popdgoto :eofrem ========================================================================================================:toLower str -- converts uppercase character to lowercase
::           -- str [in,out] - valref of string variable to be converted
:$created 20060101 :$changed 20080219 :$categories StringManipulation
:$source http://www.dostips.com
if not defined %~1 EXIT /b
for %%a in ("A=a" "B=b" "C=c" "D=d" "E=e" "F=f" "G=g" "H=h" "I=i""J=j" "K=k" "L=l" "M=m" "N=n" "O=o" "P=p" "Q=q" "R=r""S=s" "T=t" "U=u" "V=v" "W=w" "X=x" "Y=y" "Z=z" "??"?? "??) do (call set %~1=%%%~1:%%~a%%
)
EXIT /brem ========================================================================================================:: %1 an error message
:exitB
echo:
echo Error: %1
echo:
echo Contact stathis@npcglib.org
@exit /B 0

bat脚本+vs2019编译openssl(x86 | x64) - (static | shared) - (debug | release)相关推荐

  1. openssl / vs2019 编译 openssl 1.0.2u 过程说明

    一.准备 1.安装 perl http://strawberryperl.com/download/5.28.1.1/strawberry-perl-5.28.1.1-64bit.msi 2.下载 o ...

  2. vs2019 编译 openssl 1.0.2

    1,准备好openssl https://www.openssl.org/source/old/1.0.2/openssl-1.0.2u.tar.gz 2,安装perl https://platfor ...

  3. 【错误记录】Windows 系统 bat 脚本报错 ( Java 生成 bat 脚本乱码处理 | 输出 GB2312 字符串 | Windows 中的换行时 \r\n )

    文章目录 一.报错信息 二.问题分析 二.解决方案 一.报错信息 使用 Java 语言生成了 Windows 系统中的 bat 批处理脚本 , 运行后出现中文乱码 ; 使用如下 Java 代码生成 b ...

  4. 关于.NET编译的目标平台(AnyCPU,x86,x64) (转)

    关于.NET编译的目标平台(AnyCPU,x86,x64)(转) 今天有项目的代码收到客户的反馈,要求所有的EXE工程的目标平台全部指定成x86,而所有DLL工程的目标平台全部指定成AnyCPU . ...

  5. 关于.NET编译的目标平台(AnyCPU,x86,x64)

    在VisualStudio中项目平台属性包含x86/x64/AnyCPU三个选项,之前的项目中并没有特别去关注这一点,最近的项目中涉及到了在不同平台运行的问题,所以专门了解并整理了这方面的知识. x8 ...

  6. 【转】iOS编译OpenSSL静态库(使用脚本自动编译)

    原文网址:https://www.jianshu.com/p/651513cab181 本篇文章为大家推荐两个脚本,用来iOS系统下编译OpenSSL通用库,如果想了解编译具体过程,请参看<iO ...

  7. VS x86 x64 anycpu 编译运行对照表

    VS x86 x64 anycpu 编译运行对照表

  8. Win10+VS2015平台下OpenCV3.1.0的x86和x64平台的Debug与Release模式的编译与配置

    闲话 昨天晚上在新电脑上重新配置了OpenCV3.1,之前虽然也弄过,不过当时是初学者,只是照着网上的教程简单的配置了Debug模式下x86的运行环境(大部分的教程也只教了这种方式的配置......) ...

  9. Windows10 VS2019编译WebRTC官方demo

    1.操作系统要求 Windows10专业版1909,64位版本 内存12G,建议越大越好 预留了50G磁盘空间,注意有大于4G文件,所以文件系统格式需要是NTFS 2.编译工具链VS2019 使用的是 ...

最新文章

  1. 【怎样写代码】确保对象的唯一性 -- 单例模式(二):解决方案
  2. Wake-On-LAN待机或休眠模式中唤醒
  3. 【弱化版】【P3371 【模板】单源最短路径(弱化版)】-C++
  4. 中国组合聚醚市场十四五发展规划与未来竞争趋势分析报告2022-2028年版
  5. SQLServer之创建数据库架构
  6. 在食堂吃饭是最好的解
  7. 他人评审18篇SCI文章的一点感受
  8. python win7 sp1_[ Python - 15 ] win7安装paramiko问题总汇
  9. React之事件处理
  10. php 强制输出数组,php怎么将对象强制转数组
  11. 7.卷1(套接字联网API)---套接字选项
  12. CV+Deep Learning——网络架构Pytorch复现系列——classification(一:LeNet5,VGG,AlexNet,ResNet)
  13. win10计算机管理员的权限才能删除,Win10文件夹删除不了需要管理员权限怎么办?Win10文件夹删除不了需要管理员权限的解决方法...
  14. html 库存管理页面,库存管理
  15. Tomcat8如何配置项目appBase和docBase
  16. 路由器和电脑IP地址、端口号、网卡mac查询方式
  17. 安装linux系统提示acpi,安装Linux系统时的ACPI和APIC问题
  18. 重新定义工作站的“边界”
  19. 一维数组、二维数组的大小、长度与偏移
  20. 【观察】中国跨境电商出海再加速背后,如何破解行业同质化竞争困局?

热门文章

  1. 今年美国数据中心投资规模超182亿美元 超前三年总和
  2. php 登陆 才能查看,WordPress登录后才能查看网站内容,未登录跳转登录页面教程...
  3. Ubuntu16.04 配置SSH无密码登录
  4. 『转载』在vs2008(2005)winform中,打开office文档
  5. 无向图的完美消除序列 判断弦图 ZOJ 1015 Fish net
  6. vue脚手架---vue-cli
  7. JVM 学习笔记 1. JVM 运行模型
  8. BloomFilter–大规模数据处理利器(转)
  9. Floyd-Warshall算法
  10. 解决Flash影片中的图片抖动锯齿