VS 项目文件 .vcxproj 文件 工程自定义宏

来源:互联网 发布:java面试笔试题及答案 编辑:程序博客网 时间:2024/06/02 02:29
对某一类工程例如 OpenCV 工程,可以建立模板,每次进行重新建立工程时,工程路径都已经配置完好,以此避免每次都需要手动配置工程。
如果自行添加 property sheet 的话,每次新建工程师还得手动添加这个属性页,但这样的话是 IDE 环境交互式修改,容易上手和实现。

因此选择以先配置好一个 OpenCV 类工程,再以此为模板建立新工程。这里面如果采用宏定义的话将会使得这个模板更有可拓展性,那么就可以通过修改系统环境变量添加全局的宏,还可以在 Microsoft.Cpp.Win32.user 文件中来添加宏,这个宏对 VS 是全局的,最后一种就是添加本工程才会用到的宏,然而本工程的 属性页中(对应 .vcxproj 文件)并没有像 Microsoft.Cpp.Win32.user 里那样可以自定义宏,那么就需要手动修改 .vcxproj 文件来达到目的。
这个形式类似于 CUDA 在 VS 中建立一个新工程时的做法,CUDA 新工程的 .vcxproj 文件中除了导入 VC 中补丁属性外还导入了 CUDA 定义的属性:
<Import Project="$(VCTargetsPath)\BuildCustomizations\CUDA 6.5.props" />
翻看 CUDA 6.5.props 就回发现许多在 CUDA 类工程中才会出现的宏。

那么同样的,对于 OpenCV 就在其工程文件 .vcxproj 中添加自定义,只对本工程有效的宏:
<!-- 2015/05/06/1606-->  <!--Line before modification-->  <!--   <PropertyGroup Label="UserMacros" />   -->  <!--Lines after modification-->  <PropertyGroup Label="UserMacros">    <OPENCV_PATH_2_4_8_BUILD>C:\Program Files\OpenCV-2.4.8\build</OPENCV_PATH_2_4_8_BUILD><OPENCV_PATH_2_4_8_ADDITIONALLIB>C:\Program Files\OpenCV-2.4.8\build</OPENCV_PATH_2_4_8_ADDITIONALLIB>  </PropertyGroup>  <!--Modification end here-->
需要注意的是,全局宏与项宏之间的区别:
全局宏
应用于项目配置的所有项目。 具有语法 $(name)。 全局宏的示例是 $(VCInstallDir),它存储 Visual Studio 安装的根目录。 全局宏与 MSBuild 中的 PropertyGroup 相对应。
项宏
具有语法 %(name)。 对于文件来说,仅适用于该文件的项宏,例如可以使用 %(AdditionalIncludeDirectories) 来指定仅适用于特定文件的包含目录。 这种项宏与 MSBuild 中的 ItemGroup 元数据相对应。 在项目配置中使用时,项宏适用于特定类型的所有文件。 例如,C/C++“预处理器定义”配置属性可以获取适用于项目中所有 .cpp 文件的 %(PreprocessorDefinitions) 项宏。 这种项宏与 MSBuild 中的 ItemDefinitionGroup 元数据相对应。 有关详细信息,请参阅项定义。

但 .vcxproj 不是万能的,对于有些属性我们就不是那么容易修改的。
例如我想在“调试->环境”中实现合并环境:
PATH=%PATH%;$(OPENCV_PATH_2_4_8_BUILD)\x86\vc11\bin;
但是在工程文件中始终没能找到对应项。

如何建立工程模板,可以参考文章:
在 Visual Studio 中创建项目和项的模板
为Visual Studio添加项目模板及项模板

相关文章:
Visual Studio 2010 C++ 工程文件中添加自定义宏

.vcxproj 文件组织结构:

http://blogs.msdn.com/b/visualstudio/archive/2010/05/14/a-guide-to-vcxproj-and-props-file-structure.aspx

http://blogs.msdn.com/b/vsproject/archive/2009/06/18/platform-extensibility-part-2.aspx



0 0
原创粉丝点击