2011-09-23 2 views
2

CMake 2.8.1을 사용하고 있습니다 (CMake 2.8.5에서도이 방법을 사용했습니다). VS2008 용 Visual Studio 생성기를 사용하고 있습니다. 나는 몇몇 파일들에 대해 다른 파일 들과는 다른 방식으로 컴파일 플래그를 선택적으로 적용하고 싶다. 그리고이 모든 파일들은 동일한 정적 라이브러리로 들어간다. (라이브러리를 두 개의 다른 타겟으로 분할하는 것은 이번에는 옵션이 아니다.) 이 경우에는 컴파일 플래그가 달라야하므로 set_target_properties을 사용할 수 없습니다. 그러나 나는 아주 이상한 것을 발견했다.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 
) 

이 왜 다음 작품 (내가 /flubber 옵션은 CMake가 생성 된 .vcproj 파일의 AdditionalOptions 필드에 표시 볼 것으로 정의되는 작품) 필터링 밖으로 필터링하거나 /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