2011-09-23 45 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