Win7下vs2013的Makefile示例

         对于跨平台的C/C++工程,在windows和linux上编译代码是一件比较头疼的事,linux上的Makefile网上资料比较丰富,而windos的Makefile资料就不多,本文是一个vs2013的dll工程的nmake对应的Makefile文件,目的是脱离IDE进行代码编译。

参考资料:

1. https://msdn.microsoft.com/en-us/library/dd9y37ha.aspx   《NMAKE Reference》


        运行方法:将文件 run_windows.bat 和 Makefile.vs2013 放在同一个工程目录下,然后鼠标双击 run_windows.bat,会自动弹出cmd窗口编译出win32/x64的Debug/Release版本。
@rem filename: run_windows.bat

set version=v1.0.2.19

if not "%1" == "" set version=%1

call "C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcvarsall.bat" x86
nmake.exe -f Makefile.vs2013 DEBUG=0 PLATFORM=Win32 PROJECT_VERSION=%version%
nmake.exe -f Makefile.vs2013 DEBUG=1 PLATFORM=Win32 PROJECT_VERSION=%version%

call "C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcvarsall.bat" amd64
nmake.exe -f Makefile.vs2013 DEBUG=0 PLATFORM=x64 PROJECT_VERSION=%version%
nmake.exe -f Makefile.vs2013 DEBUG=1 PLATFORM=x64 PROJECT_VERSION=%version%


# filename: Makefile.vs2013
# Makefile for project MyTestSDK; vs2013 x64|Win32;
# "C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcvarsall.bat" amd64|x86
# 386520874@qq.com && 2018.07.06

PLATFORM = x64
DEBUG = 0

#-----------------------------------------
PROJECT_VERSION = v1.0.2.19
PROJECT_NAME = MyTestSDK
PROJECT_DIR = $(MAKEDIR)\..
PREFIX_DIR = $(PROJECT_DIR)\bin\$(PROJECT_VERSION)
SUFFIX = 

EXE = $(PROJECT_NAME).dll
LIB_NAME = $(PROJECT_NAME).lib

INCLUDE = /I. /I"C:\Program Files (x86)\Windows Kits\8.1\Include\um" /I"C:\Program Files (x86)\Windows Kits\8.1\Include\shared"

#LIB_PATH_Win32 = /LIBPATH:.;"C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\lib";"C:\Program Files (x86)\Windows Kits\8.1\lib\winv6.3\um\x86";
#LIB_PATH_x64 = /LIBPATH:.;"C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\lib\amd64";"C:\Program Files (x86)\Windows Kits\8.1\lib\winv6.3\um\x64";

LIB_PATH_Win32 =
LIB_PATH_x64 =

#-----------------------------------------
!IF "$(PLATFORM)" == "Win32"
CC = "C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\cl.exe"
LD = "C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\link.exe"
RC = "C:\Program Files (x86)\Windows Kits\8.1\bin\x86\rc.exe"
!ELSEIF "$(PLATFORM)" == "x64"
CC = "C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\amd64\cl.exe"
LD = "C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\amd64\link.exe"
RC = "C:\Program Files (x86)\Windows Kits\8.1\bin\x86\rc.exe"
!ENDIF

#-----------------------------------------
CXXFLAGS_Win32 = /c /Zi /nologo /W3 /WX- /D WIN32 /D _CONSOLE /D _LIB /D JVIA_SDK_EXPORTS /D _WINDLL /D _MBCS /EHsc /GS /fp:precise /Zc:wchar_t /Zc:forScope /Gd /TP /errorReport:prompt /Oy- /analyze-
LDFLAGS_Win32 = /ERRORREPORT:PROMPT /NOLOGO /MANIFEST /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /manifest:embed /DEBUG /SUBSYSTEM:CONSOLE /TLBID:1 /DYNAMICBASE /NXCOMPAT /MACHINE:X86 /DLL \
$(LIB_PATH_Win32) kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib

CXXFLAGS_x64 = /c /Zi /nologo /W3 /WX- /D WIN32 /D _CONSOLE /D _LIB /D JVIA_SDK_EXPORTS /D _WINDLL /D _MBCS /EHsc /GS /fp:precise /Zc:wchar_t /Zc:forScope /Gd /TP /errorReport:prompt
LDFLAGS_x64 = /ERRORREPORT:PROMPT /NOLOGO /MANIFEST /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /manifest:embed /DEBUG /SUBSYSTEM:CONSOLE /TLBID:1 /DYNAMICBASE /NXCOMPAT /MACHINE:X64 /DLL \
$(LIB_PATH_x64) kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib 

#-----------------------------------------
!IF "$(PLATFORM)" == "Win32"

!	IF $(DEBUG) == 1
CXXFLAGS = $(CXXFLAGS_Win32) /D _DEBUG /Gm /MDd /Od /RTC1
LDFLAGS = $(LDFLAGS_Win32) /INCREMENTAL
OUTPUT_DIR = $(PROJECT_DIR)\build\$(PLATFORM)\Debug\$(PROJECT_VERSION)
TEMP_DIR = $(PROJECT_DIR)\temp\$(PLATFORM)\Debug
SUFFIX = Win32-d
!	ELSE
CXXFLAGS = $(CXXFLAGS_Win32) /D NDEBUG /Gm- /MD /O2 /Oi /GL /Gy
LDFLAGS = $(LDFLAGS_Win32) /INCREMENTAL:NO /OPT:REF /OPT:ICF /LTCG /SAFESEH
OUTPUT_DIR = $(PROJECT_DIR)\build\$(PLATFORM)\Release\$(PROJECT_VERSION)
TEMP_DIR = $(PROJECT_DIR)\temp\$(PLATFORM)\Release
SUFFIX = Win32
!	ENDIF

!ELSEIF "$(PLATFORM)" == "x64"

!	IF $(DEBUG) == 1
CXXFLAGS = $(CXXFLAGS_x64) /D _DEBUG /Gm /MDd /Od /RTC1
LDFLAGS = $(LDFLAGS_x64) /INCREMENTAL
OUTPUT_DIR = $(PROJECT_DIR)\build\$(PLATFORM)\Debug\$(PROJECT_VERSION)
TEMP_DIR = $(PROJECT_DIR)\temp\$(PLATFORM)\Debug
SUFFIX = x64-d
!	ELSE
CXXFLAGS = $(CXXFLAGS_x64) /D NDEBUG /Gm- /MD /O2 /Oi /GL /Gy
LDFLAGS = $(LDFLAGS_x64) /INCREMENTAL:NO /OPT:REF /OPT:ICF /LTCG
OUTPUT_DIR = $(PROJECT_DIR)\build\$(PLATFORM)\Release\$(PROJECT_VERSION)
TEMP_DIR = $(PROJECT_DIR)\temp\$(PLATFORM)\Release
SUFFIX = x64
!	ENDIF

!ENDIF

#-----------------------------------------
SRCS = \
.\MyTestSDK.cpp

OBJS = $(SRCS:.cpp=.obj)

RC_FILE = $(MAKEDIR)\MyTestSDK.rc
RES = $(TEMP_DIR)\MyTestSDK.res

#-----------------------------------------
ALL: clean CREATE_DIR $(EXE) install

CREATE_DIR:
	if not exist $(TEMP_DIR) mkdir $(TEMP_DIR)
	if not exist $(OUTPUT_DIR) mkdir $(OUTPUT_DIR)
	if not exist $(PREFIX_DIR) mkdir $(PREFIX_DIR)
 
$(EXE): $(OBJS) $(RES)
	cd /d $(TEMP_DIR) && $(LD) $** $(LDFLAGS) /OUT:"$(OUTPUT_DIR)\$@" /IMPLIB:"$(OUTPUT_DIR)\$(PROJECT_NAME).lib" /PDB:"$(OUTPUT_DIR)\$(PROJECT_NAME).pdb" 

.cpp.obj:
	$(CC) $(CXXFLAGS) $(INCLUDE) /Fo"$(TEMP_DIR)\\" /Fd"$(TEMP_DIR)\\" $<
	
$(RES): $(RC_FILE)
	$(RC) /l"0x0409" /nologo $(INCLUDE) /fo"$(RES)" $(RC_FILE)

install:
	if exist "$(OUTPUT_DIR)\$(EXE)" copy "$(OUTPUT_DIR)\$(EXE)" "$(PREFIX_DIR)\$(PROJECT_NAME).$(SUFFIX).dll"
	if exist "$(OUTPUT_DIR)\$(LIB_NAME)" copy "$(OUTPUT_DIR)\$(LIB_NAME)" "$(PREFIX_DIR)\$(PROJECT_NAME).$(SUFFIX).lib"
	if exist "$(PROJECT_DIR)\VideoAnalysisSDK_include\$(PROJECT_VERSION)\*.h" copy "$(PROJECT_DIR)\VideoAnalysisSDK_include\$(PROJECT_VERSION)\*.h" "$(PREFIX_DIR)"

clean:
	if exist "$(OUTPUT_DIR)" del /q "$(OUTPUT_DIR)\*"
	if exist "$(TEMP_DIR)" del /q "$(TEMP_DIR)\*"

uninstall:
	if exist "$(PREFIX_DIR)" del /q "$(PREFIX_DIR)\*"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值