2016-12-30 2 views
5

मैं इस सरल CMake फ़ाइलक्यों सीएमके विजुअल स्टूडियो प्रोजेक्ट में अनावश्यक पुस्तकालयों को जोड़ता है?

cmake_minimum_required(VERSION 2.8) 
project(test) 
set(SOURCES source.cpp) 
add_executable(test ${SOURCES}) 

जहां source.cpp एक सरल नमस्ते दुनिया कार्यक्रम है। मैं तो दृश्य स्टूडियो परियोजना

cmake -G"Visual Studio 14 2015" ..\Sources 

उत्पन्न दृश्य स्टूडियो परियोजना निम्नलिखित पुस्तकालयों है, उत्पन्न Configuration Properties > Linker > Input > Additional Dependencies के तहत:

kernel32.lib 
user32.lib 
gdi32.lib 
winspool.lib 
shell32.lib 
ole32.lib 
oleaut32.lib 
uuid.lib 
comdlg32.lib 
advapi32.lib 

अगर मैं इन पुस्तकालयों को दूर मैं अभी भी सफलतापूर्वक निर्माण और हैलो दुनिया चला सकते हैं।

सीएमके इन सभी पुस्तकालयों को क्यों जोड़ता है और मैं अपनी परियोजनाओं में उन्हें रखने के लिए क्या कर सकता हूं?

+4

वे सभी मानक विंडोज ओएस पुस्तकालय हैं (जो विंडोज कर्नेल, उपयोगकर्ता और जीडीआई डीएलएल से कनेक्ट होते हैं)। इनमें से कई (अधिकांश) किसी भी विंडोज़ एप्लिकेशन के लिए आवश्यक हैं जो कंसोल पर * हैलो, वर्ल्ड * लिखने से ज्यादा कुछ करता है। –

+0

@ केनहाइट ठीक है, लेकिन अगर उनकी आवश्यकता है तो मैं अभी भी बिना किसी लिंक के अपने प्रोजेक्ट को चला सकता हूं? – Ali

+2

क्योंकि आप एक साधारण * हैलो वर्ल्ड * एप्लिकेशन लिख रहे हैं, संभवतः। –

उत्तर

2

जैसा कि @Vertexwahn द्वारा टिप्पणी की गई है, वे CMAKE_CXX_STANDARD_LIBRARIES_INITCMakeCXXInformation.cmake में सीएमके से परिभाषित डिफ़ॉल्ट हैं।

cmake_minimum_required(VERSION 3.0) 

file(
    WRITE "${CMAKE_BINARY_DIR}/MakeRulesOverwrite.cmake" 
[=[ 
    if (MSVC)   
     set(CMAKE_CXX_STANDARD_LIBRARIES_INIT "%(AdditionalDependencies)") 
    endif() 
]=] 
) 
set(CMAKE_USER_MAKE_RULES_OVERRIDE "${CMAKE_BINARY_DIR}/MakeRulesOverwrite.cmake") 

project(test) 
... 

संदर्भ

+0

वाह, बहुत अच्छा। 'CMAKE_USER_MAKE_RULES_OVERRIDE' के बारे में नहीं पता था। क्या आप '[= ['/'] =] 'क्या करता है इसके लिए एक लिंक भी जोड़ सकते हैं? – Ali

+1

@Ali इस भाग को [ब्रैकेट तर्क] कहा जाता है (https://cmake.org/cmake/help/latest/manual/cmake-language.7.html#bracket-argument) और बस '[= ['/'] =] 'के रूप में ब्रैकेट्स (इंडेंटेशन और न्यूलाइन सहित)। मैं उन लोगों का उपयोग करता हूं यदि मैं उदा। सीधे एक और पाठ फ़ाइल की सामग्री लिखना चाहते हैं। – Florian

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