[CMake] Set Source Property For Specific Target
David Cole
david.cole at kitware.com
Thu Mar 17 14:25:02 EDT 2011
There is a very old, long-standing open bug (in the "backlog" now)
that outlines many of the issues related to supporting pre-compiled
headers.
http://public.kitware.com/Bug/view.php?id=1260
Doing a "copy and rename" strategy for StdAfx.cpp is a reasonable
work-around until such time as this can be addressed in a general way.
General support for this particular feature does not appear to be on
any short-term horizon as far as I'm aware.
HTH,
David
On Thu, Mar 17, 2011 at 1:53 PM, Kawicki, Ryan H
<Ryan.H.Kawicki at boeing.com> 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
>
> Thanks for the reply. While I haven't tested this solution out,
> I don't think I would prefer this kind of solution, as I would
> hope that CMake would support this option out of the box.
>
> Looks like I'll have to see if there is a ticket for this
> kind of change or search the code to see how hard this
> can be added to CMake.
>
> Thanks,
>
> Ryan
> _______________________________________________
> 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
>
More information about the CMake
mailing list