2011-09-23 124 views
2

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

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”开头的标志,这些标志对于想要在一个源文件中指定,而不是另一个,并且在同一个静态库目标中是完全有效的。

回答

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" /> 
+0

这非常有帮助。标记为答案。 – bgoodr