Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/140.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Visual Studio 11中用于生成命令和属性的宏_C++_Visual Studio 2012 - Fatal编程技术网

C++ Visual Studio 11中用于生成命令和属性的宏

C++ Visual Studio 11中用于生成命令和属性的宏,c++,visual-studio-2012,C++,Visual Studio 2012,第一个问题由三部分组成: 构建时宏在VisualStudio11中是否完全充实 如何在IDE中编辑和定义它们 如何让宏在调试会话期间仍具有其意义 请注意,我指的是诸如$(ProjectDir),而不是用来记录一系列击键的IDE宏——它们,但我可以不使用它们。我一直在通过VisualStudio10中的属性页定义自己的构建时宏。例如,我可以创建一个宏,通过视图>属性管理器>Microsoft.Cpp.x64在x64版本中定义名为$(BoostDir)的本地计算机上安装Boost的位置。用户: 我

第一个问题由三部分组成:

  • 构建时宏在VisualStudio11中是否完全充实
  • 如何在IDE中编辑和定义它们
  • 如何让宏在调试会话期间仍具有其意义
  • 请注意,我指的是诸如
    $(ProjectDir)
    ,而不是用来记录一系列击键的IDE宏——它们,但我可以不使用它们。我一直在通过VisualStudio10中的属性页定义自己的构建时宏。例如,我可以创建一个宏,通过视图>属性管理器>Microsoft.Cpp.x64在x64版本中定义名为
    $(BoostDir)
    的本地计算机上安装Boost的位置。用户

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

    在试图在VisualStudio11开发者预览版中编译和运行我的VS10项目时,我遇到了与这些宏有关的几个问题

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

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

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

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

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


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

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

    如果您还不知道如何做到这一点,您需要使用自己的属性表

    制作一个新的属性表,并使用公共属性>用户宏中的部分

    例如,我在一个名为IncludeBoost.props的属性表中有一个名为BOOST\u 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+单击多个选择