[CMake] Pre-Compiled Headers

John Drescher drescherjm at gmail.com
Thu Aug 20 17:29:41 EDT 2009


On Thu, Aug 20, 2009 at 5:25 PM, ML<mailinglists at mailnewsrss.com> wrote:
> Hi All,
>
> I need to use a pre-compiled header.
>
> I think that I recall that CMake is not yet equipped to handle this.
>
> I found thought a Google search that SET_SOURCE_FILES_PROPERTIES might be
> the way to go.
>
> Has anyone implemented PCH and have an example, advice, etc?
>

I do this for my Visual Studio builds with a macro.

#########################################################################################

macro( LA_PCH_SUPPORT ProjectName )
if (MSVC)
       if (USE_MSVC_PCH)

               set_source_files_properties(${ProjectName}PCH.cxx
                       PROPERTIES
                       COMPILE_FLAGS "/Yc${ProjectName}PCH.h"
                       )
               foreach( src_file ${${ProjectName}_SRCS} )
                       set_source_files_properties(
                               ${src_file}
                               PROPERTIES
                               COMPILE_FLAGS "/Yu${ProjectName}PCH.h"
                               )
               endforeach( src_file ${${ProjectName}_SRCS} )

               list(APPEND ${ProjectName}_SRCS ${ProjectName}PCH.cxx)
               list(APPEND ${ProjectName}_EXT_HDRS ${ProjectName}PCH.h)

       endif(USE_MSVC_PCH)
endif (MSVC)
endmacro (LA_PCH_SUPPORT)


Then its usage in a project named laGUI

SET( laGUI_SRCS
       ./src/laMultiViewFrameMgr.cxx
       ./src/VTK2dWidget.cpp
       ./src/laCentralWidget.cxx
       ./src/laImageSliceView.cxx
       ./src/laWLWidget.cxx
       ./src/laTableWidget.cxx
       ./src/laPipelineWidget.cxx
       ./src/ImageSliceViewer.cxx
       ./src/InteractorObserver.cxx
       ./src/laVTKInteractorStyleImage2D.cxx
       ./src/laVTKCommandImage2D.cxx
       ./src/la2DView.cxx
       ./src/la3DView.cxx
)

SET( laGUI_EXT_HDRS
       ./Include/InteractorObserver.h
       ./Include/laVTKInteractorStyleImage2D.h
       ./Include/laVTKCommandImage2D.h
)

SET( laGUI_MOC_HDRS
       ./Include/ImageSliceViewer.h
       ./Include/laMultiViewFrameMgr.h
       ./Include/VTK2dWidget.h
       ./Include/laCentralWidget.h
       ./Include/laImageSliceView.h
       ./Include/laWLWidget.h
       ./Include/laTableWidget.h
       ./Include/laPipelineWidget.h
       ./Include/la2DView.h
       ./Include/la3DView.h
)

#Add precompiled header support
LA_PCH_SUPPORT(laGUI)


Then externally create

laGUIPCH.cxx
laGUIPCH.h

in the same folder as the CMakeLists.txt file for the project.

John


More information about the CMake mailing list