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