【问题标题】:cmake set_property on SOURCE files with COMPILE_FLAGS带有 COMPILE_FLAGS 的源文件上的 cmake set_property
【发布时间】:2011-11-24 00:17:36
【问题描述】:

我正在使用 CMake 2.8.1(也在 CMake 2.8.5 上尝试过)。我正在使用 VS2008 的 Visual Studio 生成器。我想在某些源文件上选择性地应用编译标志,而不是其他文件,并且所有这些文件都进入同一个静态库(此时将库拆分为两个不同的目标不是一个选项)。在这种情况下我不能使用set_target_properties,因为编译标志必须不同。但是我发现了一些很奇怪的东西。以下作品(我看到 /flubber 选项出现在 CMake 生成的 .vcproj 文件的 AdditionalOptions 字段中的作品被定义):

set_property(SOURCE file1.cpp file2.cpp
  PROPERTY COMPILE_FLAGS /flubber
  )

但这不起作用:

set_property(SOURCE file1.cpp file2.cpp
  PROPERTY COMPILE_FLAGS /GR
  )

为什么 CMake 会过滤掉或忽略 /GR 选项?这是 CMake 错误还是故意的?

现在这个问题有点做作,因为在 VS2005 左右,/GR 选项被定义为默认打开(给出 RTTI),所以我真的不必指定它。但这不是重点,因为还有其他以“/G”开头的标志完全有效,希望在一个源文件上指定,但不是另一个,并且在同一个静态库目标中。

【问题讨论】:

    标签: visual-studio visual-studio-2008 cmake


    【解决方案1】:

    Visual Studio 为/GR 标志提供了特殊选项:

    cmake 知道这一点并将您的 /GR 标志转换为该选项。如果您使用记事本打开 cmake 生成的项目文件 (.vcproj),那么您可以在文件配置中看到额外的 RuntimeTypeInfo="TRUE" 属性:

    /flubber 标志添加:

    <Tool Name="VCCLCompilerTool" AdditionalOptions="/flubber" />
    

    /GR 标志添加:

    <Tool Name="VCCLCompilerTool" RuntimeTypeInfo="TRUE" /> 
    

    【讨论】:

    • 这很有帮助。标记为答案。
    猜你喜欢
    • 2021-12-14
    • 2018-06-18
    • 2015-06-10
    • 2011-04-27
    • 1970-01-01
    • 1970-01-01
    • 2011-03-28
    • 2019-08-11
    • 2018-04-08
    相关资源
    最近更新 更多