On Mon, 2014-02-17 at 10:20 +0100, Hendrk Sattler wrote:
> Visual Studio 10 totally relies on the custom build tool to protect 
> itself when run in parallel.  It will run the generator as many times
> as the bar.cpp is mentioned in different targets, even in parallel if
> that is enabled.

Yes, this matches what I found after sending my last email.  I was able
to get something to work the way I wanted, following the outline I had
originally provided using an OBJECT library instead of using source
files directly, like this (I made the generator more complex to better
emulate my real environment):

  cmake_minimum_required(VERSION 2.8.12)

  project(TEST C CXX)

  include_directories(${CMAKE_CURRENT_BINARY_DIR})

  add_custom_command(OUTPUT bar.cpp bar.h biz.cpp biz.h
      COMMAND sh ${CMAKE_CURRENT_SOURCE_DIR}/genfile bar bar biz
      COMMAND sh ${CMAKE_CURRENT_SOURCE_DIR}/genfile biz bar biz
      DEPENDS foo.cpp ${CMAKE_CURRENT_SOURCE_DIR}/genfile
      COMMENT "GENERATING bar.cpp")

  set_source_files_properties(bar.cpp bar.h biz.cpp biz.h
      PROPERTIES GENERATED TRUE)

  add_library(Bobj OBJECT bar.cpp bar.h biz.cpp biz.h)

  add_library(Bar STATIC base.cpp $<TARGET_OBJECTS:Bobj>)
  add_library(BarDLL SHARED base.cpp $<TARGET_OBJECTS:Bobj>)

By creating the "Bobj" OBJECT library I'm only mentioning the source
file one time and this appears to make things work properly: the
generator is only invoked one time, and if I re-run the build without
changing anything, nothing is rebuilt.


The problem, of course, is that it uses the exact same .OBJ file to link
into both the shared and static libraries.  In my real environment I'm
using different -D* flags, so that doesn't work.

Also I'm not as familiar with Windows; do you need to compile the OBJ
files differently if you're targeting static vs. DLL libraries (similar
to UNIX's -fPIC flag--although -fPIC can actually be specified for both
static and shared libraries)?

-- 

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