On 03/16/2011 09:19 PM, Kawicki, Ryan H wrote:
> Quick question.
> 
> I am trying to add precompiled headers to a project that has been converted 
> to use Cmake.
> 
> In our library directory, we include all our source and build two targets 
> (one static and one dynamic), but setting multiple source values only affects 
> the source and not the source associated to a particular target.  Is there a 
> way to get around this issue or something in the works to correct this, like 
> an optional target command?
> 
> Thanks...
> 
> Code below describing the issue:
> 
> FUNCTION (ADD_MSVC_PRECOMPILED_HEADERS
>           PrecompiledSource PrecompiledHeader TargetProject)
>   IF (MSVC)
>     # define the location of the precompiled header
>     SET(PrecompiledBinary "${CMAKE_CURRENT_BINARY_DIR}/${TargetProject}.pch")
>     # set the target project to use the precompiled binary
>     SET_PROPERTY(TARGET ${TargetProject}
>                  APPEND
>                  PROPERTY COMPILE_FLAGS
>                  "/Yu\"${PrecompiledHeader}\" /Fp\"${PrecompiledBinary}\"")
>     # set the source file to compile out the pch
>     SET_PROPERTY(SOURCE ${PrecompiledSource}
>                  APPEND
>                  PROPERTY COMPILE_FLAGS
>                  "/Yc\"${PrecompiledHeader}\" /Fp\"${PrecompiledBinary}\"")
>   ENDIF (MSVC)
> ENDFUNCTION (ADD_MSVC_PRECOMPILED_HEADERS)
> 
> ADD_LIBRARY(MyLibDynamic SHARED ${SRC})
> ADD_LIBRARY(MyLibStatic STATIC ${SRC})
> 
> ADD_MSVC_PRECOMPILED_HEADERS(StdAfx.cpp StdAfx.h MyLibDynamic)
> ADD_MSVC_PRECOMPILED_HEADERS(StdAfx.cpp StdAfx.h MyLibStatic)
> 
> When MyLibDynamic builds, it builds MyLibStatic.pch but tries to find 
> MyLibDynamic.pch.
> This is because the second function call to setup precompiled headers modifies
> what appears to be a property that is not unique to all targets added at the 
> same
> directory level of the CMakeLists.
> 
> Thanks again. . .

You might copy or symlink the concerned sources, one per target,
and impose the properties on these symlinks, e.g. as follows:

ADD_CUSTOM_COMMAND(
    OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/StdAfxDynamic.cpp
    OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/StdAfxStatic.cpp
    COMMAND ${CMAKE_COMMAND} -E create_symlink
        ${CMAKE_CURRENT_SOURCE_DIR}/StdAfx.cpp
        ${CMAKE_CURRENT_BINARY_DIR}/StdAfxDynamic.cpp
    COMMAND ${CMAKE_COMMAND} -E create_symlink
        ${CMAKE_CURRENT_SOURCE_DIR}/StdAfx.cpp
        ${CMAKE_CURRENT_BINARY_DIR}/StdAfxStatic.cpp
    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/StdAfx.cpp
)

ADD_LIBRARY(MyLibDynamic SHARED StdAfxDynamic.cpp ${SRC})
ADD_LIBRARY(MyLibStatic STATIC StdAfxStatic.cpp ${SRC})

ADD_MSVC_PRECOMPILED_HEADERS(StdAfxDynamic.cpp StdAfx.h MyLibDynamic)
ADD_MSVC_PRECOMPILED_HEADERS(StdAfxStatic.cpp StdAfx.h MyLibStatic)

Of course, SRC mustn't contain StdAfx.cpp anymore for this to work.

'hope that helps.

Regards,

Michael
_______________________________________________
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