2017-11-30 3 views
0

私はマルチターゲットのCMakeプロジェクトを持っています。それらの1つは、ネイティブ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を使用してください。

第2に、文字列を引用しないために問題が発生する可能性があります。引用とき、私は再現することはできません。

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: <...> 
を生成します
関連する問題