Hi all.  I'm using CMake 2.8.12.1 on Linux, MacOSX, and Windows.

On my system I need to build libraries in a large number of
subdirectories and link them (statically) with various executables
(different executables use different libraries).  Then I also need to
take the content of all those libraries and include them into a single
shared library / DLL.  I understand this is tricky for CMake and so the
special "OBJECT" library type was introduced to help with that.

Here's a repro case for the problem I see:

  cmake_minimum_required(VERSION 2.8.12)
  project(CMTEST CXX)

  add_library(foo_OBJECTS OBJECT foo.cpp foo.h)

  add_library(foo STATIC dummy.cpp $<TARGET_OBJECTS:foo_OBJECTS>)
  add_dependencies(foo foo_OBJECTS)

  add_executable(hello hello.cpp)
  target_link_libraries(hello foo)

I needed to add the "dummy.cpp" because I previously learned that Xcode
can't handle creating a library only from OBJECTS like this.  It
contains nothing but a comment.

      * I run cmake -G Xcode
      * I run xcodebuild build -config RelWithDebInfo
      * Everything is built correctly
      * Now I modify "foo.cpp"
      * I run xcodebuild build -config RelWithDebInfo

For the last step I expect that:
     1. foo.cpp will be recompiled
     2. libfoo.a library will be updated
     3. the "hello" program will be rebuilt.

As a side-effect I guess a hidden "libfoo_OBJECTS.a" will be created,
but I don't actually care about that.

This is how it works with Makefile and MSVC.  With Xcode, though, what
actually happens is that the "libfoo_OBJECTS.a" is rebuild, BUT it does
NOT rebuild libfoo.a and it does NOT relink the "hello" executable!!

I've explicitly stated a dependency between the foo library target and
the foo_OBJECTS target, and it still does not rebuild on changes!

As you can imagine this is causing my Xcode-based builds to be
completely unreliable: they fail with weird link errors, or else at
runtime with strange vtable issues.

Anyone else able to reproduce this?  Is it a known limitation of Xcode?
Any ideas for workarounds?

-- 

Powered by www.kitware.com

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

Kitware offers various services to support the CMake community. For more 
information on each offering, please visit:

CMake Support: http://cmake.org/cmake/help/support.html
CMake Consulting: http://cmake.org/cmake/help/consulting.html
CMake Training Courses: http://cmake.org/cmake/help/training.html

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

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

Reply via email to