2011-12-21 4 views
7

में रनटाइम चेक संकलक फ्लैग प्रति-परियोजना को हटाएं मेरे पास एक सीएमकेई कॉन्फ़िगरेशन है जहां मेरे सभी प्रोजेक्ट कॉन्फ़िगरेशन में /RTC1 (दोनों रनटाइम चेक) कंपाइलर ध्वज शामिल हैं। हालांकि, मैं केवल एक परियोजना के लिए Default विकल्प पर स्विच करना चाहता हूं, क्योंकि इसमें /clr कंपाइलर ध्वज भी है; जो रनटाइम चेक ध्वज के साथ असंगत है। मैं सीएमकेई के लिए अपेक्षाकृत नया हूं, इसलिए इसका एक स्पष्ट समाधान हो सकता है, लेकिन अब तक मैं इसे खोजने में असमर्थ हूं।सीएमकेई

किसी भी मदद की सराहना की जाएगी।

उत्तर

10

मैं एक समाधान जिससे मैं अच्छी तरह से विशेष रूप से विकल्पों को निकाल सकता है खोजने के लिए प्रबंधन नहीं किया है, लेकिन मैं चर संकलक झंडे से विकल्प अलग करना का उपयोग करने का एक तरीका है एक regex REPLACE मिला:

STRING (REGEX REPLACE "/RTC(su|[1su])" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") 

कहाँ यह सबसे आदर्श दृष्टिकोण नहीं हो सकता है, इसने मेरी स्थिति में अच्छी तरह से काम किया है जहां यह एक विशेषीकृत परिदृश्य है।

+0

एफडब्ल्यूआईडब्ल्यू, मुझे इसे 'CMAKE_C_FLAGS' और 'CMAKE_C_FLAGS_DEBUG' के साथ दोहराना पड़ा। मैंने इसे [एसडीएल 2 के सीएमकेएलिस्ट्सटीटीटी से पैटर्न] का उपयोग करके लूप में किया था [https://github.com/spurious/SDL-mirror/blob/release-2.0.3/CMakeLists.txt#L158)। –

2

यदि आप add_definitions() के साथ अपने झंडे जोड़ रहे हैं, तो आप उन्हें remove_definitions के साथ हटा सकते हैं, documentation देखें।

इसके अलावा, आप COMPILE_DEFINITIONS लक्ष्य संपत्ति के साथ खेल सकते हैं।

+0

मैंने 'remove_definitions' का उपयोग करने का प्रयास किया, लेकिन मूल सेटिंग 'set (...)' का उपयोग करके सेट की गई थी, इसलिए 'remove_definitions' काम नहीं किया। मैं एक REGEX REPLACE कमांड का उपयोग कर समस्या को हल करने के समाप्त हो गया। –

+0

मैं देखता हूं। यह आपके प्रश्न से स्पष्ट नहीं था। – arrowd

1

मुझे हाल ही में एक ही समस्या का सामना करना पड़ा और कोई सुरुचिपूर्ण समाधान नहीं मिला।

foreach(flag_var 
     CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE 
     CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO) 
    STRING (REGEX REPLACE "/RTC[^ ]*" "" ${flag_var} "${${flag_var}}") 
endforeach(flag_var) 
set_property(TARGET necessary_targets_here APPEND_STRING PROPERTY COMPILE_FLAGS " /RTC1") 

आप केवल एक विन्यास (पूर्व डिबग।) आप निम्नलिखित दृष्टिकोण की कोशिश कर सकते के लिए /RTC झंडा स्पष्ट करने की जरूरत है:

STRING (REGEX REPLACE "/RTC[^ ]*" "" CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}") 
foreach(target_var necessary_targets_here) 
    target_compile_options(${target_var} PRIVATE $<$<CONFIG:Debug>: /RTC1>) 
endforeach() 

कृपया, टिप्पणी generator expression$<$<CONFIG:Debug>: /RTC1 > का उपयोग कर फिर भी इस कोड का काम करता है जो केवल डीबग में /RTC1 तक फैलता है।

संबंधित मुद्दे