[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