Visual Studio 11中的构建命令和属性的宏

Joh*_*ing 5 c++ visual-studio-2012

首先是三部分问题:

  1. 构建时宏是否在Visual Studio 11中完全充实?
  2. 如何在IDE中编辑和定义它们?
  3. 在调试会话期间,如何让宏仍然具有其含义?

请注意,我指的是构建时宏$(ProjectDir),不用于记录一系列按键的IDE宏-他们把那些离开,但我生活中可以没有他们.我一直在通过Visual Studio 10中的属性页面定义自己的构建时宏.例如,我可以$(BoostDir)通过View> Property Manager> Microsoft.Cpp创建一个宏来定义在我的本地计算机上以x64版本命名的Boost的位置.x64.user:

VS10中的宏定义

我使用此功能是因为我可能(例如)Boost安装在不同计算机上的不同位置.这些属性是特定于机器的,不会签入源代码管理.然后我可以在项目设置中使用这些宏来检查源代码控制,只要我为该机器定义了宏,它就可以在我编译这个项目的每台机器上运行.

在此输入图像描述

在尝试在Visual Studio 11开发人员预览版中编译和运行我的VS10项目时,我遇到了关于这些宏的几个问题.

首先,在VS11中似乎没有用于定义这些用户定义的宏的接口.他们在VS10的位置,现在VS11中什么都没有:

在此输入图像描述

似乎这些宏确实存在于Compiler/IDE中的某个级别,因为我能够无错误地编译我的项目,如果这些宏不存在于某处,我将无法做到这一点.

其次,虽然宏似乎在构建过程中存在,但它们在调试会话期间似乎不存在.用于解析VS10中某些DLL存在的目录的宏现在无法在VS11中解析这些目录,并且我得到运行时错误:

在此输入图像描述

此DLL所在的目录在VS10和VS11中定义:

在此输入图像描述

...但是我的宏在调试会话期间似乎没有任何意义.

如何在VS11中获取VS10中依赖的所有与宏相关的功能?

Tim*_*ner 1

如果您还没有弄清楚如何执行此操作,则需要使用您自己的属性表。

创建一个新的属性表,并使用“公共属性”>“用户宏”中的部分。

例如,我在名为 IncludeBoost.props 的属性表中有一个名为 BOOST_VER 的宏,我在其中设置了所有内容。

User Macros
Name       Value
BOOST_VER  1.49.0

C/C++ > General > Additional Include Directories >
"$(environment variable)\3rdParty\Boost_$(BOOST_VER)\Boost";%(AdditionalIncludeDirectories)

C/C++ > Preprocessor > Preprocessor Definitions >
BOOST_ALL_DYN_LINK;%(PreprocessorDefinitions)

Linker > General
$(env var)\3rdParty\Boost_$(BOOST_VER)\Boost\lib\$(Platform);%(AdditionalLibraryDirectories)
Run Code Online (Sandbox Code Playgroud)

请注意,也选择了正确的平台(Win32 或 x64)。

顺便说一句,属性管理器支持 Ctrl+单击多项选择。

HTH。