如何阻止CMake链接libstdc ++

时间:2013-02-25 00:26:48

标签: cmake

我有一个非常简单的C ++项目CMakeLists.txt,它构建了一个共享库:

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

链接库时,CMake会自动使用-lstdc ++。我怎么能阻止它这样做?

2 个答案:

答案 0 :(得分:7)

您可以将 -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++ ...

<强> [更新]

如果您根本不需要链接到c ++ lib,请使用' - nodefaultlibs'作为链接器标志,将' - nostdinc ++'添加到编译器标志。您可能需要链接一些默认库,例如' - lSystem'

答案 1 :(得分:5)

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