2013-01-05 13 views
25

मैं Windows एसडीके और Nmake Makefiles साथ खिड़कियों पर cmake उपयोग कर रहा हूँ के साथ संकलनCMake/बजाय मीट्रिक टन/एमडी

डिफ़ॉल्ट रूप से यह/एमडी संकलक स्विच के साथ संकलित करता है।

इसके बजाय मैं/एमटी स्विच के साथ संकलित करने के लिए इसे कैसे बदल सकता हूं? , अपने CMake झंडे को पहले से ही /MD शामिल है तो

set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MT") 
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MTd") 

आप यह सुनिश्चित कर सकते हैं कि ऊपर बताए गए आदेशों बिंदु है जिस पर /MD डाला जाता है के बाद क्रियान्वित कर रहे हैं (:

उत्तर

41

आप CMAKE_CXX_FLAGS_<Build Type> और/या CMAKE_C_FLAGS_<Build Type> चर को संशोधित कर सकते हैं बाद में /MT विरोधाभासी मौजूदा विकल्प को ओवरराइड करता है), या आप झंडे से झंडे सेट कर सकते हैं:

set(CMAKE_CXX_FLAGS_RELEASE "/MT") 
set(CMAKE_CXX_FLAGS_DEBUG "/MTd") 
,210

या वैकल्पिक रूप से, आप क्रमशः की तरह कुछ कर रही द्वारा /MT और /MTd के साथ मौजूदा /MD और /MDd मूल्यों की जगह सकता है:

set(CompilerFlags 
     CMAKE_CXX_FLAGS 
     CMAKE_CXX_FLAGS_DEBUG 
     CMAKE_CXX_FLAGS_RELEASE 
     CMAKE_C_FLAGS 
     CMAKE_C_FLAGS_DEBUG 
     CMAKE_C_FLAGS_RELEASE 
     ) 
foreach(CompilerFlag ${CompilerFlags}) 
    string(REPLACE "/MD" "/MT" ${CompilerFlag} "${${CompilerFlag}}") 
endforeach() 
+0

धन्यवाद! यह काम करता है। वैसे भी पुराने '/ एमडी' ध्वज को हटाने के लिए? – Josh

+0

@ जोश मैंने अभी जवाब अपडेट किया है। यदि यह अभी भी ठीक नहीं है, तो आप अपने CMakeLists.txt के प्रासंगिक बिट को दिखाएं और मुझे यकीन है कि एक साफ जवाब होगा। – Fraser

+0

@ जोश मैंने 'स्ट्रिंग (REPLACE ...) 'कमांड में मामूली गलती की - यह अभी तय है। – Fraser

0

चेकआउट ucm_set_runtime - इस मैक्रो स्थिर या गतिशील क्रम के लिए झंडे की जगह लेगा - प्रभाव देखने के लिए ucm_print_flags का उपयोग करें (चेकआउट this स्टैक ओवरफ्लो थ्रेड)

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