使用COMPILE_FLAGS在SOURCE文件上使用cmake set_property

时间:2011-09-23 21:44:24

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

我正在使用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”开头,这些标志完全有效,希望在一个源文件上指定,而不是在另一个源文件上指定,并且在同一个静态库目标中。

1 个答案:

答案 0 :(得分:4)

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

enter image description here

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

添加了

/flubber标志:

<Tool Name="VCCLCompilerTool" AdditionalOptions="/flubber" />
添加了

/GR标志:

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