[CMake] Precompiled Headers
John Drescher
drescherjm at gmail.com
Sun Jun 7 00:22:45 EDT 2009
On Sun, Jun 7, 2009 at 12:07 AM, Robert Dailey<rcdailey at gmail.com> wrote:
> Hey guys,
> First of all I just want to let you guys know that I DID find this in my
> search:
> http://www.cmake.org/pipermail/cmake/2008-May/021483.html
> However, I do not feel as if a direct answer was given. Besides, that was
> over a year ago and I'm hoping some new developments have taken place. Is
> there a portable way of handling PCH files in CMake 2.6.4 or in a
> development/nightly build? If so, how do I enable it? I'm using Visual
> Studio 2008, generated by CMake 2.6.4.
> Thanks.
>
Here is what I do for Vs2005 builds and CMake 2.6.4
I put this in the main CMakeLists.txt before any add_subdirectory(Libraries)
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)
So then to use the macro for a library 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)
You need to then create
laGUIPCH.h
laGUIPCH.cxx
the .cxx file contains any headers that will be not changed often.
This is the same as stdafx.cpp was and the .h file must be included in
every cpp that is in the ${ProjectName}_SRCS list
I hope this makes sense.
John
More information about the CMake
mailing list