Windows下命令行编译MFC工程

Posted -飞鹤-

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Windows下命令行编译MFC工程相关的知识,希望对你有一定的参考价值。

1. makefile方式

Visual Studio自带有nmake,也可以解析makefile文件,但是功能较弱,此处使用gcc自带的make解析工具。

1.1. 配置编译环境

call “C:\\Program Files (x86)\\Microsoft Visual Studio 10.0\\VC\\vcvarsall.bat”

1.2. 建立测试工程

新建mfc的对话框工程,名字默认即可。

1.3. 建立makefile文件

SRC_DIR=.
OBJ_DIR=debug
CPP_SRC=$(wildcard $(SRC_DIR)/*.cpp)

OBJ_FILES=$(CPP_SRC:$(SRC_DIR)/%.cpp=$(OBJ_DIR)/%.obj)
PCH_FILE=mfc.pch
MANIFEST_FILE=$(OBJ_DIR)\\mfc.exe.embed.manifest.res

PCH_OPT=/c /ZI /nologo /W3 /WX- /Od /Oy- /D WIN32 /D _WINDOWS /D _DEBUG /D _MBCS /D _AFXDLL /Gm /EHsc /RTC1 /MDd /GS /fp:precise /Zc:wchar_t /Zc:forScope
PCH_OPT+=/Yc"StdAfx.h" /Fp$(OBJ_DIR)"\\mfc.pch" /Fo$(OBJ_DIR)"\\\\" /Fd$(OBJ_DIR)"\\vc100.pdb" /Gd /TP /analyze- /errorReport:queue stdafx.cpp

REC_OPT=/D _DEBUG /D _AFXDLL /l"0x0409" /Idebug\\ /nologo /fo$(OBJ_DIR)"\\mfc.res" mfc.rc

APP_NAME=mfcTest.exe
RES_FILE=mfc.rc
RES_OBJ=mfc.res

LINK_OPT=
mfc: $(OBJ_DIR) $(PCH_FILE) $(OBJ_FILES) $(RES_FILE)
link /OUT:"$(APP_NAME)" /nologo /subsystem:windows /TLBID:1 /DYNAMICBASE /NXCOMPAT /IMPLIB:"debug\\mfc.lib" /MACHINE:X86 $(OBJ_FILES) $(RES_OBJ)

$(RES_FILE):$(RES_OBJ)
rc $(REC_OPT)

$(PCH_FILE): stdafx.cpp
cl $(PCH_OPT)

$(OBJ_FILES): $(CPP_SRC)
cl /nologo /MDd /D "_DEBUG" /D "_AFXDLL" /Fo"debug\\\\" /c $(CPP_SRC)


$(OBJ_DIR):
md $(OBJ_DIR)

.phony: clean

clean:
	del /s debug\\*.obj

1.4. 执行 make

清除编译文件

make clean

编译

make

2. msbuild

2.1. 语法

2.2. 编译整个解决方案

如果当前目录下只有一个项目,可以不用指定项目名。
msbuild
msbuild mfc.sln

2.3. 编译指定工程

msbuild mfc\\mfc.vcxproj

2.4. 清除编译生成

/t, -t两种形工均可。
msbuild mfc.sln /t:clean
msbuild mfc.sln -t:clean

2.5. 重新编译

msbuild mfc.sln /t:rebuild

2.6. 编译指定配置版本

默认为版本为Debug
msbuild mfc.sln /p:configuration=“Release”
msbuild mfc.sln /p:configuration=“Debug”
msbuild mfc.sln /p:configuration=“Test”

2.7. 编译指定平台

默认平台类型为Win32
msbuild mfc.sln /p:configuration=“Debug” /p:Platform=Win32
msbuild mfc.sln /p:configuration=“Debug” /p:Platform=x64

2.8. 多核编译

为了提高编译速度,可以指定多核编译,以下命令表示启动所有核进行编译
msbuild mfc.sln /p:configuration=“Debug” /p:Platform=Win32 /m
以下命令表示启用2核进行编译
msbuild mfc.sln /p:configuration=“Debug” /p:Platform=Win32 /m:2

2.9. 指定输出目录

vcxproj文件中,有很多可以修改的变量, ( C o n f i g u r a t i o n ) , (Configuration), (Configuration)(Platform), ( P r o j e c t N a m e ) , (ProjectName), (ProjectName)(OutDir), ( T a r g e t N a m e ) , (TargetName), (TargetName)(TargetExt)等,都是可以通过/p:来指定的。
msbuild /p:OutDir=d:\\bin

2.10. 指定多个参数

指定警告级别和编译版本
msbuild mfc.sln /p:configuration=Release;Platform=x64;WarningLevel=2

2.11 添加自定义编译参数

view->property manager->Add New Property Sheet,添加完成之后,右键新建Property选择User Macro,添加自定义USER_Macro。然后在c/c+±>Command Line中添加/DUSER_Macro
msbuild mfc.sln /p:USER_Macro=TEST_MODE
然后可以代码中使用
#ifdef TEST_MODE
#endif

以上是关于Windows下命令行编译MFC工程的主要内容,如果未能解决你的问题,请参考以下文章

在windows平台如何用MinGW编译工程?工程中有Makefile.an和Makefile.in文件,要输入啥命令呢?

windows下用命令行编译并运行java工程,怎样编译引用的多个jar包和配置文件.xml呢?

MFC学习计算器

windows下命令行编译DLL

Windows 编程,程序编译使用的命令行工具。

我要做很多system()命令行操作windows c++ MFC项目,弹出黑框,有没有办法抑制呢?