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

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

在尝试在Visual Studio 11开发人员预览版中编译和运行我的VS10项目时,我遇到了关于这些宏的几个问题.
首先,在VS11中似乎没有用于定义这些用户定义的宏的接口.他们在VS10的位置,现在VS11中什么都没有:

似乎这些宏确实存在于Compiler/IDE中的某个级别,因为我能够无错误地编译我的项目,如果这些宏不存在于某处,我将无法做到这一点.
其次,虽然宏似乎在构建过程中存在,但它们在调试会话期间似乎不存在.用于解析VS10中某些DLL存在的目录的宏现在无法在VS11中解析这些目录,并且我得到运行时错误:

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

...但是我的宏在调试会话期间似乎没有任何意义.
如何在VS11中获取VS10中依赖的所有与宏相关的功能?
如果您还没有弄清楚如何执行此操作,则需要使用您自己的属性表。
创建一个新的属性表,并使用“公共属性”>“用户宏”中的部分。
例如,我在名为 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。