c++ - Visual Studio 11 中生成命令和属性的宏

标签 c++ visual-studio-2012

首先是三部分问题:

  1. 构建时宏是否在 Visual Studio 11 中得到了充分充实?
  2. 如何在 IDE 中编辑和定义它们?
  3. 如何让宏在调试 session 期间仍然有意义?

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

macro definitions in VS10

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

enter image description here

在尝试在 Visual Studio 11 Developer Preview 中编译和运行我的 VS10 项目时,我遇到了一些与这些宏相关的问题。

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

enter image description here

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

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

enter image description here

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

enter image description here

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

如何在 VS11 中恢复我在 VS10 中依赖的所有与宏相关的功能?

最佳答案

如果您还不知道如何执行此操作,则需要使用您自己的属性表。

创建一个新的属性表,并使用 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)。

顺便说一句,Property Manager 支持 Ctrl+click 多选。

HTH.

关于c++ - Visual Studio 11 中生成命令和属性的宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7612584/

相关文章:

c# - 如何在 EF6 异步中启动实体存储过程而不等待返回?

visual-studio-2012 - 升级到 .9,在声明文件中,别名模块不再适用于 = 符号的右侧

c++ - 从类节点上的结构中创建二叉搜索树会很糟糕吗?

windows-8 - 在 localFolder 中写入文件特定文件夹

c++ - 理解运算符重载的问题

C++ 编译器认为我的构造函数定义是一个方法

visual-c++ - Xinput 不适用于带有 Visual Studio 2012 的 Windows 7

c++ - 什么名称查找规则适用于静态常量数据成员定义中的名称

c++ - 我不明白这个错误 (LPCWSTR)

c++ - 不应该保证复制省略适用吗?