On 10/09/2012 01:59 AM, James Bigler wrote:
> On Mon, Oct 8, 2012 at 10:40 PM, James Bigler <jamesbig...@gmail.com 
> <mailto:jamesbig...@gmail.com>> wrote:
> In my project I need to manually link against a special version of libstdc++
>     add_library(a SHARED a.cpp)
>     set_target_properties(a PROPERTIES LINKER_LANGUAGE "C")
> 
>     add_library(b SHARED b.c)
> 
>     And here's the compiler output which has the -lstdc++ on the link line 
> for library a, but not for library b.
[snip]
> I told CMake to link the target as if it were a C target, then it decides that
> it needs CXX libraries because it found CXX sources in my library.  
> 
> If I go through the trouble of specifying that I want to link the library as 
> if
> it were C, why do the source files get to override my property?  

CMake is using the C compiler to drive the link call as you request.  That is
all the LINKER_LANGUAGE property says:

 http://www.cmake.org/cmake/help/v2.8.9/cmake.html#prop_tgt:LINKER_LANGUAGE
 "...sets the language whose compiler is used to link the target..."

However CMake knows that the sources have C++ code so it still wants to link 
against
the C++ runtime libraries.  This is the same feature that allows one to link 
C++ and
Fortran code together.  It chooses the C++ linker and adds the Fortran runtime 
libs.

It is a feature and it is working exactly as intended.  The C++ runtime 
libraries
are detected when the CXX language is enabled.  There is a 
CMakeCXXCompiler.cmake
file under the CMakeFiles directory of the top-level build directory.  It 
contains
settings like:

 SET(CMAKE_CXX_IMPLICIT_LINK_LIBRARIES "stdc++;m;c")
 SET(CMAKE_CXX_IMPLICIT_LINK_DIRECTORIES "...")

Whenever C++ sources are found in a target CMake will make sure these libraries
appear on the link line or are also implicit for the linker language.  You can
hide the C++ runtime libraries by erasing these values:

 set(CMAKE_CXX_IMPLICIT_LINK_LIBRARIES "")
 set(CMAKE_CXX_IMPLICIT_LINK_DIRECTORIES "")

That along with setting LINKER_LANGUAGE to "C" should do what you want.

-Brad
--

Powered by www.kitware.com

Visit other Kitware open-source projects at 
http://www.kitware.com/opensource/opensource.html

Please keep messages on-topic and check the CMake FAQ at: 
http://www.cmake.org/Wiki/CMake_FAQ

Follow this link to subscribe/unsubscribe:
http://www.cmake.org/mailman/listinfo/cmake

Reply via email to