⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 clock.make.bat

📁 代码优化,有效使用内存,透视优化技术,对比优化方法,如果你在追求代码效率的最大化,该资源你不能不读.
💻 BAT
字号:
@ECHO OFF
SETLOCAL
REM ================================ Compiling unitilty =======================
REM 1) INSTALLATION NOTES:
REM  - The CLOCKSDK environment variable must specify the path to the CLOCKSDK
REM    installation directory _without_ terminating slash
REM ===========================================================================
REM /* -----------------------------------------------------------------------
REM
REM                          C O N F I G U R A T O N 
REM
REM -------------------------------------------------------------------------*/
REM
IF NOT #%CLOCKSDK%#==## GOTO install_ok
	SET CLOCKSDK=F:\.optimize-I\bin\clock
	REM default path to CLOCK SDK
:install_ok

SET MSVC_NAME=Microsoft Visual C++
SET BC_NAME=Borland C++
SET WPP_NAME=WATCOM

SET COMPIL=MSVC
REM ^^^^^^^^^^^ Default compiler type
REM             The following compilers are supported:
REM             MSVC : Microsoft Visual C++
REM             BC   : Borland C++
REM             WPP  : Watcom  C++
 
SET COMPIL_NAME=%MSVC_NAME%
REM ^^^^^^^^^^^ Default compiler name

SET OPTIONS=
REM ^^^^^^^^^^^^^^^
REM 			Default compile mode
REM 			The following modes are supported:
REM				-release : compiling with optimization
REM				-debug   : compiling with debug information
REM				##		 : default compiling

SET WX=


REM call-back for KPNC.SHELL
:kpnc_shell
IF #%1#==#__class#    GOTO end
IF #%1#==#__typeinfo# GOTO usage
IF #%1#==#/?#         GOTO help

REM // TITLE
ECHO * CLOCK PROJECT MAKER * by Kris Kaspersky Version 1.0 beta AT 23-07-2001
ECHO (utility for "Program optimization technique" book)

IF #%CLOCKSDK%#==## GOTO ERR_NO_CLOCKSDK

REM /* -----------------------------------------------------------------------
REM
REM    P A R S I N G   C O M M A N D   L I N E   A R G U M E N T S 
REM
REM -------------------------------------------------------------------------*/
REM

	REM /*             Parsing command-line arguemtns                    */
	REM ===================================================================

	:P1
	IF #%1#==## GOTO help

:parse 
	:P11
	IF NOT #%1#==#-MSVC# GOTO P2
		SHIFT
		SET COMPIL=MSVC
		SET COMPIL_NAME==%MSVC_NAME%

	:P2
	IF NOT #%1#==#-BC# GOTO P3
		SHIFT
		SET COMPIL=BC
		SET COMPIL_NAME=%BC_NAME%

	:P3
	IF NOT #%1#==#-WPP# GOTO P4
		SHIFT
		SET COMPIL=WPP
		SET COMPIL_NAME=%WPP_NAME%

	:P4
	IF NOT #%1#==#-debug# GOTO P5
		SHIFT
		SET OPTIONS=-debug

	:P5
	IF NOT #%1#==#-release# GOTO P6
		SHIFT
		SET OPTIONS=-release

	:P6
	IF NOT #%1#==#-nop# GOTO P7
		SHIFT

	:P7
	IF NOT #%1#==#-nocleartmp# GOTO P8
		SHIFT
		SET nocleartmp=YES

	:P8
	IF NOT #%1#==#-LIB# GOTO P9
		SHIFT
		SET MYLIB=%1
		SHIFT

	:P9
 	IF NOT #%1#==#--w!# GOTO P10
		SHIFT
		SET WX=--w!

	:P10
	IF NOT #%1#==#--cpp# GOTO P11
		SHIFT
		SET C_AS_CPP=--cpp

:P11

:do_it
REM /* -----------------------------------------------------------------------
REM
REM 				Check for existence of SDK riles                 
REM
REM -------------------------------------------------------------------------*/
REM
	IF NOT EXIST %CLOCKSDK%\SOURCE\DoCPU.asm GOTO ERR_NO_DoCPU_ASM
	IF NOT EXIST %CLOCKSDK%\INCLUDE\DoCPU.h  GOTO ERR_NO_DoCPU_H

	REM /*                   STARTING PROJECT BUILD                       */
	REM ======================================================================
		ECHO ===== %~n1 project =====
		IF NOT EXIST %~n1.c   	GOTO ERR_C_NOT_EXIST
		IF #%~n1#==#code#		GOTO ERR_PRJ_NAME

	REM displaying list of project files
		SET FILES_PRG=%~n1.c
		IF EXIST %~n1.mod  SET FILES_PRG=%FILES_PRG%;%~n1.mod
		IF EXIST %~n1.ini  SET FILES_PRG=%FILES_PRG%;%~n1.ini
		SET FILES_PRG=%FILES_PRG%;DoCPU.asm;DoCPU.h.
		ECHO [0/3] Project files %FILES_PRG%

	REM  /*               Preparing files for assembling               */
	REM  ======================================================================
		COPY %CLOCKSDK%\SOURCE\DoCPU.asm %CLOCKSDK%\TEMP\	>NUL
		IF EXIST %~n1.mod COPY %~n1.mod  %CLOCKSDK%\TEMP\	>NUL
		IF EXIST %~n1.ini COPY %~n1.ini  %CLOCKSDK%\TEMP\	>NUL

		IF EXIST 		%~n1.mod ECHO INCLUDE %~n1.mod	 	> %CLOCKSDK%\TEMP\code.inc
		IF NOT EXIST  	%~n1.mod ECHO ;                		> %CLOCKSDK%\TEMP\code.inc

		IF EXIST 		%~n1.ini ECHO INCLUDE %~n1.ini 		> %CLOCKSDK%\TEMP\code.ini
		IF NOT EXIST  	%~n1.ini ECHO ; 	 		   		> %CLOCKSDK%\TEMP\code.ini


	REM /*                     Preparing the clock.clear.bat file              */
	REM ===========================================================================
		ECHO ECHO this file was generated by clock.make.bat for clearing temprary files of the %~n1 project > %CLOCKSDK%\TEMP\clock.clear.bat

		ECHO DEL %CLOCKSDK%\TEMP\code.inc   > %CLOCKSDK%\TEMP\clock.clear.bat
		ECHO DEL %CLOCKSDK%\TEMP\code.ini  >> %CLOCKSDK%\TEMP\clock.clear.bat
		ECHO DEL %CLOCKSDK%\TEMP\DoCPU.asm >> %CLOCKSDK%\TEMP\clock.clear.bat

		IF EXIST %CLOCKSDK%\TEMP\%~n1.mod ECHO DEL %CLOCKSDK%\TEMP\%~n1.mod >> %CLOCKSDK%\TEMP\clock.clear.bat
		IF EXIST %CLOCKSDK%\TEMP\%~n1.ini ECHO DEL %CLOCKSDK%\TEMP\%~n1.ini >> %CLOCKSDK%\TEMP\clock.clear.bat

		ECHO IF EXIST DoCPU.obj DEL DoCPU.obj >> %CLOCKSDK%\TEMP\clock.clear.bat
		ECHO IF EXIST %~n1.obj  DEL %~n1.obj  >> %CLOCKSDK%\TEMP\clock.clear.bat

		IF #%OPTIONS%#==#-release# ECHO IF EXIST %~n1.pdb DEL %~n1.pdb >> %CLOCKSDK%\TEMP\clock.clear.bat
		IF #%OPTIONS%#==#-release# ECHO IF EXIST vc??.pdb DEL vc??.pdb >> %CLOCKSDK%\TEMP\clock.clear.bat

		IF #%OPTIONS%#==#-release# ECHO IF EXIST %~n1.tds  DEL %~n1.tds >> %CLOCKSDK%\TEMP\clock.clear.bat


	REM  **********************   Assembling DoCPU ******************************
	REM  ==========================================================================
		ECHO [1/3] Assembling DoCPU.asm
		rem IF #%COMPIL%#==#MSVC#  	SET OOPS1=/coff
		rem IF #%OPTIONS%#==#DEBUG#	SET OOPS2=/Zi
		ml.exe /WX /X /c /nologo %CLOCKSDK%\TEMP\DoCPU.asm > %~n1.err

		IF NOT EXIST DoCPU.obj 		GOTO ERR_LINK
		IF EXIST %~n1.err			DEL %~n1.err


	REM *************************   Compiling  *******************************
	REM =========================================================================
		ECHO [2/3] Compiling the "%~n1" project by %compil_name% %2 %3 %4 %5 %6 %7 %8 %9
		IF EXIST %~n1.exe 			DEL %~n1.exe

		
		SET CMDLINE=%WX% %OPTIONS% -nologo %C_AS_CPP% --I %CLOCKSDK%\INCLUDE\ --o DoCPU.obj --l USER32.LIB --l "%MYLIB%"
        IF #%MYLIB%#==## SET CMDLINE=%WX% %OPTIONS% -nologo %C_AS_CPP% --I %CLOCKSDK%\INCLUDE\ --o DoCPU.obj --l USER32.LIB

        rem ECHO %COMPIL%
		REM choosing the compiler
		IF %COMPIL%==MSVC 			GOTO msvc
		IF %COMPIL%==BC 			GOTO bc
		IF %COMPIL%==WPP 			GOTO wpp
		GOTO ERR_UNK_COMPIL

	:MSVC
		rem ECHO XXXX
		call cl.bat		%CMDLINE% %~n1.c %2 %3 %4 %5 >%~n1.err
	GOTO after_compil

	:BC
		call bcc32.bat	%CMDLINE% %~n1.c %2 %3 %4 %5 >%~n1.err
	GOTO after_compil

	:WPP
		call wpp.bat %WX% %OPTIONS% -nologo --I %CLOCKSDK%\INCLUDE\ --o DoCPU.obj --l USER32.LIB;%MYLIB% %~n1.c %2 %3 %4 %5 >%~n1.err
	GOTO after_compil


:AFTER_COMPIL


	REM /*                     Deleting temporary files                   */
	REM =====================================================================
	IF #%OPTIONS%#==#RELEASE# IF EXIST %~n1.pdb DEL %~n1.pdb
	IF #%OPTIONS%#==#RELEASE# IF EXIST %~n1.ilk DEL %~n1.ilk
	IF NOT #%NOCLEARTMP%#==#YES# GOTO DEL_TEMP
	ECHO [3/3] Temporary files were not deleted because of -nocleartmp option

	GOTO CHK_ERR

	:DEL_TEMP
	ECHO [3/3] Deleting temporary files
	CALL %CLOCKSDK%\TEMP\clock.clear.bat

	:CHK_ERR
	IF #%ERR_COMPIL%#==#TRUE# 	GOTO err_compil
	IF NOT EXIST %~n1.exe 		GOTO ERR_COMPIL
	IF EXIST %~n1.err DEL %~n1.err


	ECHO [+OK] Project successfully compiled
	ECHO ::The %~n1.exe file was created
	IF #%OPTIONS%#==#DEBUG#   ECHO ::with debug info
	IF #%OPTIONS%#==#RELEASE# ECHO ::compiled with maximum optimization
	GOTO END

:HELP
	ECHO USAGE:
	ECHO clock.make.bat [-debug\-release\-nop\-BC\-WPP\-LIB] modname [arg1,arg2,..]
	ECHO       -debug      : generate debug info
	ECHO       -release    : maximum optimization   
	ECHO       -nocleartmp : do not delete temporary files        
GOTO END

:USAGE
	ECHO CLOCK PROJECT MAKER     [clock.make.bat $opt $filename $user_opt] 
GOTO END

:ERR_LINK
	ECHO -ERR: Assembling error. See %~n1.err
GOTO END

:ERR_COMPIL
	ECHO -ERR: Compiling error. See %~n1.err
GOTO END


:ERR_C_NOT_EXIST
ECHO -ERR: The %1 main module doesn't exist
GOTO END

:ERR_PRJ_NAME
ECHO -ERR: The CODE keyword cannot be used for naming the project 
GOTO END


:ERR_NO_DoCPU_ASM
ECHO.
ECHO -ERR: The %CLOCKSDK%\SOURCE\DoCPU.ASM file is missing
ECHo Restore the file and try again!
GOTO END

:ERR_NO_DoCPU_H
ECHO.
ECHO -ERR: The %CLOCKSDK%\INCLUDE\DoCPU.h file is missing
ECHo Restore the file and try again!
GOTO END


:ERR_NO_CLOCKSDK
ECHO.
ECHO -ERR: The CLOCKSDK environment variable is not specified.
ECHO This variable sets the path to CLOCKSDK installation directory
ECHO without terminating slash. Set this variable and try again...
GOTO END

:ERR_UNK_COMPIL
ECHO -ERR: Unknown compiler: %compil%
GOTO END

ENDLOCAL
:END
set errorlevel=1

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -