[cmake-developers] [CMake 0015885]: Ninja always relinks libraries that doesn't export any symbols (on Windows)
Mantis Bug Tracker
mantis at public.kitware.com
Wed Dec 16 05:22:19 EST 2015
The following issue has been SUBMITTED.
======================================================================
https://cmake.org/Bug/view.php?id=15885
======================================================================
Reported By: Pavel Solodovnikov
Assigned To:
======================================================================
Project: CMake
Issue ID: 15885
Category: CMake
Reproducibility: always
Severity: minor
Priority: normal
Status: new
======================================================================
Date Submitted: 2015-12-16 05:22 EST
Last Modified: 2015-12-16 05:22 EST
======================================================================
Summary: Ninja always relinks libraries that doesn't export
any symbols (on Windows)
Description:
Consider the following test case:
CMakeLists.txt:
cmake_minimum_required(VERSION 2.8)
project(foo CXX)
add_library(foo SHARED test.cpp)
test.cpp:
void foo()
{}
With such setup when I run cmake (cmake -G Ninja) and execute several
consecutive builds, each time ninja relinks "foo" library.
If test.cpp instead contains exported symbol, for example:
__declspec( dllexport ) void foo(){}
ninja works as expected, reporting for the second build "ninja: no work to do".
The cause of the problem is that cmake generates link rule for "foo.dll" in such
a way that it depends on "foo.lib" file existence:
build foo.dll foo.lib: CXX_SHARED_LIBRARY_LINKER__foo
CMakeFiles\foo.dir\test.cpp.obj
If a library has no exported symbols, MSVC doesn't produce a ".lib" file for it
during a build. Because of that ninja assumes it needs to relink again to
produce import library for "foo.dll".
Steps to Reproduce:
1) extract attached archive with test files (CMakeLists.txt and test.cpp).
2) run "cmake -G Ninja"
3) ninja (builds and links library)
4) ninja (should report "no work to do" but relinks the library again)
Additional Information:
It's a windows-specific case (more specifically Windows + MSVC, I assume, at
least not tested with MinGW toolchain), does not occur on linux since there is
no such thing as "import library" for shared libraries.
======================================================================
Issue History
Date Modified Username Field Change
======================================================================
2015-12-16 05:22 Pavel SolodovnikovNew Issue
2015-12-16 05:22 Pavel SolodovnikovFile Added: cmake_relink_test.zip
======================================================================
More information about the cmake-developers
mailing list