首先是三部分问题:
- 构建时宏是否在 Visual Studio 11 中得到了充分充实?
- 如何在 IDE 中编辑和定义它们?
- 如何让宏在调试 session 期间仍然有意义?
请注意,我指的是 build-time macros例如 $(ProjectDir)
,而不是用于记录一系列击键的 IDE 宏——它们 took those away ,但我可以没有他们生活。我一直在通过 Visual Studio 10 中的属性页定义自己的构建时宏。例如,我可能会创建一个宏来定义 Boost 在本地计算机上的安装位置,名为 $(BoostDir)
通过 View>Property Manager>Microsoft.Cpp.x64.user 构建 x64:
我使用此功能是因为我可能(例如)在不同计算机的不同位置安装了 Boost。这些属性是特定于机器的,并且未 checkin 源代码管理。然后,我可以在 checkin 源代码管理的项目设置中使用这些宏,只要我为该机器定义了宏,它就应该可以在我编译该项目的每台机器上运行。
在尝试在 Visual Studio 11 Developer Preview 中编译和运行我的 VS10 项目时,我遇到了一些与这些宏相关的问题。
首先,在 VS11 中似乎没有接口(interface)来定义这些用户定义的宏。它们在 VS10 中的位置,现在在 VS11 中什么都没有:
看起来这些宏确实存在于编译器/IDE 中的某个级别,因为我能够无错误地编译我的项目,如果这些宏不存在于某处,我将无法做到这一点。
其次,虽然宏在构建过程中似乎存在,但在调试 session 期间似乎并不存在。我用来解析 VS10 中存在某些 DLL 的目录的宏现在不解析 VS11 中的那些目录,并且我得到运行时错误:
这个DLL所在的目录在VS10和VS11中定义在这里:
...但我的宏在调试 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/