2013-02-25 17 views
9

से लिंक हो रहा से CMake को रोकने के लिए मैं एक सी ++ परियोजना है, जो एक साझा लाइब्रेरी बनाता है के लिए एक बहुत ही सरल CMakeLists.txt है:कैसे libstdC++

add_library(foo SHARED 
    ${HDR_PUBLIC} 
    ${SOURCES}) 

जब पुस्तकालय को जोड़ने, CMake स्वचालित रूप से -lstdC++ उपयोग करता है। मैं इसे करने से कैसे रोक सकता हूं?

+0

वास्तव में क्या है कि आप मुसीबतों, जो परिणाम आप से बचने के लिए कोशिश कर रहे हैं कर रहे हैं? – Antonio

+0

मैं उन वातावरणों में libstdC++ पर निर्भर नहीं हूं जहां मैं इस परियोजना को तैनात करना चाहता हूं। –

उत्तर

2
set(CMAKE_CXX_IMPLICIT_LINK_LIBRARIES "") 
set(CMAKE_CXX_IMPLICIT_LINK_DIRECTORIES "") 
set_target_properties(yourtarget PROPERTIES LINKER_LANGUAGE C) 

स्रोत: http://cmake.3232098.n2.nabble.com/setting-LINKER-LANGUAGE-still-adds-lstdc-td7581940.html

+0

3 - सच नहीं है। आप मानक सी ++ में प्लेसमेंट नए और परमाणुओं के लिए जैसे उपयोग कर सकते हैं। ये किसी भी मानक पुस्तकालयों पर निर्भर नहीं हैं। सी ++ के साथ संकलन करना और सी के साथ लिंक करना भी काफी संभव है और सी से लिंक करने के लिए LINKER_LANGUAGE का उपयोग करना है। यह हैक नहीं है। – andrewrk

8

आप -stdlib = libC++ कंपाइलर झंडे में जोड़ सकते हैं।

सरल उदाहरण:

cmake_minimum_required(VERSION 2.8.4) 
project(test) 
set(CMAKE_VERBOSE_MAKEFILE TRUE) 
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -v -stdlib=libc++") 
add_executable(test main.cpp) 

दें उत्पादन:

"/usr/bin/ld" ... -o test ... -lc++ ... 

डिफ़ॉल्ट रूप से:

cmake_minimum_required(VERSION 2.8.4) 
project(test) 
set(CMAKE_VERBOSE_MAKEFILE TRUE) 
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -v") 
add_executable(test main.cpp) 

लिंक stdc को ++:

"/usr/bin/ld" ... -o test ... -lstdc++ ... 

[अद्यतन]

आप बिल्कुल ग ++ lib से जोड़ने के लिए की जरूरत नहीं है - '-nodefaultlibs' लिंकर झंडा और के रूप में '-nostdinC++' झंडा संकलक करने के लिए इस्तेमाल करते हैं। आपको '-lSystem' जैसे कुछ डिफ़ॉल्ट पुस्तकालयों को लिंक करने की आवश्यकता हो सकती है।

+0

एचएम। मुझे आश्चर्य है कि क्या आपके पास कोई stdlib के लिए एक समान विकल्प नहीं है। मैं थोड़ी देर पहले एक अलग निर्माण प्रणाली में स्थानांतरित हो गया, लेकिन उत्तर के लिए धन्यवाद :) –

+0

यह उत्तर काम नहीं करता है। इसके बजाय मेरा देखें। – andrewrk

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