2017-11-30 3 views
0

나는 멀티 타겟을 가진 CMake 프로젝트를 가지고있다. 그 중 하나는 네이티브 C++ 코드 용 CLR 래퍼입니다. 이 대상에 대해서만 /EHsc 플래그를 비활성화하고 싶습니다. 나는 시도 :단일 타겟에서/EHsc 제거

get_target_property(MYPROPS ${DOT_NET_WRAPPER_NAME} COMPILE_FLAGS) 
message(${MYPROPS}) 
STRING(REPLACE "/EHsc" "" MYPROPS ${MYPROPS}) 
set_target_properties(${DOT_NET_WRAPPER_NAME} PROPERTIES COMPILE_FLAGS ${MYPROPS}) 

그것은 인쇄 : MYPROPS-NOTFOUND

나는 무엇을 그리워 했습니까?

답변

0

먼저 COMPILE_FLAGS은 더 이상 사용되지 않으며 속성 설명서에 기록됩니다. 대신 COMPILE_OPTIONS을 사용하십시오.

둘째, 문자열을 인용하지 않아서 문제가 발생할 수 있습니다. 인용 할 때 나는 재현 할 수

project(demo LANGUAGES C) 

file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/a.c" 
    [[ 
    #include <stdio.h> 
    int main(void) { printf("a\n"); return 0; } 
    ]]) 

add_executable(A "${CMAKE_CURRENT_BINARY_DIR}/a.c") 

target_compile_options(A PRIVATE "/EHsc") 

get_property(options TARGET A PROPERTY COMPILE_OPTIONS) 
message("Initial COMPILE_OPTIONS: ${options}") 

string(REPLACE "/EHsc" "" new_options "${options}") 

set_property(TARGET A PROPERTY COMPILE_OPTIONS "${new_options}") 

get_property(options TARGET A PROPERTY COMPILE_OPTIONS) 
message("New COMPILE_OPTIONS: ${options}") 

을 위

Initial COMPILE_OPTIONS: /EHsc 
New COMPILE_OPTIONS: 
-- Configuring done 
-- Generating done 
-- Build files have been written to: <...> 
을 생산