代码之家  ›  专栏  ›  技术社区  ›  OregonGhost

使用CMAX添加VisualC++属性表

  •  17
  • OregonGhost  · 技术社区  · 15 年前

    我目前正在移植一个GCC项目到VisualC++。它是在CGube文件中定义的,并且我创建了一个VisualC++属性表来帮助兼容性(GCCOMPAT.PROPS)。每次VisualC++项目文件由CMake重新生成时,属性表都必须手动添加,因为我不知道如何自动添加属性表。所以,问题是:

    如何告诉CMASE将属性表添加到生成的VisualC++解决方案中?

    3 回复  |  直到 15 年前
        1
  •  7
  •   MuertoExcobito    8 年前

    这个功能使它成为了cmake的夜间版本。( https://gitlab.kitware.com/cmake/cmake/commit/e390991846825799e619e072a28f1da58b7c89ba ,虽然还没有稳定释放。理论上,它将在下一个版本中发布,而cmake版本的发布相对频繁。

    使用时,您可以设置 VS_USER_PROPS 目标上的属性。如。 set_target_properties(foo PROPERTIES VS_USER_PROPS "${props_file}") .

    但是,此选项似乎不能使用多个属性表,并且,它将替换默认的用户属性文件( $(UserRootDir)\\Microsoft.Cpp.$(Platform).user.props )要解决此问题,属性表可以包含其他属性表,因此,可以生成一个“主”属性表,其中包含要使用的任何其他属性表(包括默认用户属性表)。

        2
  •  3
  •   Sepehr    9 年前

    这个问题有点老了,但我最近在将gstreamer集成到我的项目中时偶然发现了同样的问题。gstreamer提供了一组准备非常充分且高质量的属性表,我希望使用它们,而不是在cmake中随意修改。

    幸运的是,此问题仅限于windows和visual studio。所以我的解决方案是:

    这个想法是利用 Visual Studio的.user文件 特色。cmake不生成这个文件,所以在配置时生成它是非常安全的。在配置时,您可以生成具有 精确的 名称为项目文件,但以.user扩展名结尾。

    部分解决方案:

    如果项目文件名为 my_project.vcxproj ,您需要在其旁边创建另一个名为 my_project.vcxproj.user . According to MSDN :

    用户文件(.vcxproj.user)存储特定于用户的属性,用于 示例,调试和部署设置。vcxproj.user文件 适用于特定用户的所有项目。

    用于导入属性表的此文件的内容如下:

    <?xml version="1.0" encoding="utf-8"?>
    <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
      <Import Project="/path/to/sheet1.props" />
      <Import Project="/path/to/sheet2.props" />
    </Project>
    

    不是完美无缺的,但在cmake开始支持属性表之前是有效的。可以使用cmake的 file 配置时的命令。

    潜在警告:

    我注意到这样添加属性表时,有时它们不会显示在属性管理器窗口中(这可能是visual studio community 2013中的一个错误),但它们总是正确导入并正确解析依赖关系。

        3
  •  0
  •   Olha Puzhay Daniel Assange    12 年前

    不确定您需要哪些属性。一些可以直接在cmake中设置,如本例中的多个配置:

    set (CMAKE_CONFIGURATION_TYPES "A;B;C;D" CACHE STRING "Configurations" FORCE)
    
    foreach( OUTPUTCONFIG ${CMAKE_CONFIGURATION_TYPES} )
    
        set (CMAKE_CXX_FLAGS_${OUTPUTCONFIG}                "/ZI /Od")
        set (CMAKE_EXE_LINKER_FLAGS_${OUTPUTCONFIG}         "/debug")
    
    endforeach( OUTPUTCONFIG CMAKE_CONFIGURATION_TYPES )
    

    除了变量 listed here ,我认为cmake不可能附加属性表。

    推荐文章