5

先分三题:

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

请注意,我指的是构建时宏,例如$(ProjectDir),而不是用于记录一系列击键的 IDE 宏——它们把它们拿走了,但我可以没有它们。我一直在通过 Visual Studio 10 中的属性页定义自己的构建时宏。例如,我可能会创建一个宏来定义 Boost 在本地计算机上的安装位置,通过View>Property Manager>Microsoft.Cpp$(BoostDir)以 x64 构建命名.x64.user

VS10 中的宏定义

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

在此处输入图像描述

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

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

在此处输入图像描述

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

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

在此处输入图像描述

这个DLL所在的目录在VS10和VS11中定义在这里:

在此处输入图像描述

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

我怎样才能将我在 VS10 中依赖的所有与宏相关的功能恢复到 VS11 中?

4

2 回答 2

1

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

制作一个新的属性表,并使用 Common Properties > User Macros 中的部分。

例如,我在一个名为 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)

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

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

HTH。

于 2012-05-20T18:34:02.667 回答
0

我认为是您编辑的 Microsoft.Cpp.x64.user.props 位于我的 %blah%\AppData\Local\Microsoft\MSBuild\v4.0 中。我的猜测是 VS11 不使用这个进行构建设置。您真正应该做的是创建自己的属性表以用于您的项目。

于 2012-03-01T17:23:45.677 回答