[cmake-developers] [CMake 0014099]: Ninja: CMAKE_${LANG}_FLAGS passed to linker come from incorrect scope

Mantis Bug Tracker mantis at public.kitware.com
Fri Apr 19 07:05:16 EDT 2013


The following issue has been SUBMITTED. 
====================================================================== 
http://cmake.org/Bug/view.php?id=14099 
====================================================================== 
Reported By:                Andrey Kamaev
Assigned To:                
====================================================================== 
Project:                    CMake
Issue ID:                   14099
Category:                   CMake
Reproducibility:            always
Severity:                   minor
Priority:                   normal
Status:                     new
====================================================================== 
Date Submitted:             2013-04-19 15:05 MSD
Last Modified:              2013-04-19 15:05 MSD
====================================================================== 
Summary:                    Ninja: CMAKE_${LANG}_FLAGS passed to linker come
from incorrect scope
Description: 
Library/module linker is always called with same compiler flags. CMake embeds
CMAKE_${LANG}_FLAGS from the scope of the first library met by generator into
the generic link rule and uses it for all targets of the same type. But
CMAKE_${LANG}_FLAGS variables are directory scoped and should be different.

Looking into the CMake code I found that any platform having
<LANGUAGE_COMPILE_FLAGS> in link command is affected.

Steps to Reproduce: 
The minimal reproducer is attached. In short:

CMakeLists.txt from the topmost directory:

   cmake_minimum_required(VERSION 2.8.8)
   project(level0)
   set(CMAKE_CXX_FLAGS -msse2 ) # flag itself does not matter
   add_library(lelve0 SHARED level0.cpp)
   add_subdirectory(l1)

CMakeLists.txt from sub-directory:

   project(level1)
   set(CMAKE_CXX_FLAGS -mno-sse2 )
   add_library(lelve1 SHARED level1.cpp)

Resulting link commands from Ninja:

   /usr/bin/c++  -fPIC -msse2   -shared -Wl,-soname,liblelve0.so -o liblelve0.so
CMakeFiles/lelve0.dir/level0.cpp.o
   /usr/bin/c++  -fPIC -msse2   -shared -Wl,-soname,liblelve1.so -o
l1/liblelve1.so l1/CMakeFiles/lelve1.dir/level1.cpp.o

Link commands used by make:

   /usr/bin/c++  -fPIC -msse2   -shared -Wl,-soname,liblelve0.so -o liblelve0.so
CMakeFiles/lelve0.dir/level0.cpp.o
   /usr/bin/c++  -fPIC -mno-sse2   -shared -Wl,-soname,liblelve1.so -o
liblelve1.so CMakeFiles/lelve1.dir/level1.cpp.o
====================================================================== 

Issue History 
Date Modified    Username       Field                    Change               
====================================================================== 
2013-04-19 15:05 Andrey Kamaev  New Issue                                    
2013-04-19 15:05 Andrey Kamaev  File Added: repro.tar.bz2                    
======================================================================




More information about the cmake-developers mailing list