[CMake] Doesn't anyone know how to get precompiled headers working under CMake for Visual Studio 2010?

John Drescher drescherjm at gmail.com
Thu Feb 16 20:05:05 EST 2012


On Thu, Feb 16, 2012 at 7:39 PM,  <david_bjornbak at agilent.com> wrote:
> My team has been using precompiled headers under CMake and Visual Studio
> 2008 for quite a while.  Now we’ve switched to VS 2010,  the cmake code we
> used to support precompiled headers is no longer working.
>
>
>
> The following is the code in question and we’re just using
> set_source_files_properties to add the appropreiate /Yc , /Yu and /FI flags.
>
>
>
> It appears, under VS 2010, the property manager is not accepting or over
> writing these settings.
>
>
>
> Doesn’t anyone know how to get precompiled headers working under CMake for
> Visual Studio 2010?
>
>
>
>
>
>
>
>
>
> IF(EXISTS ${pch_unity})
>
>    FILE(READ ${pch_unity} buffer)
>
> ENDIF(EXISTS ${pch_unity})
>
> IF(NOT (${buffer} STREQUAL ${file_contents}))
>
>    FILE(WRITE ${pch_unity} ${file_contents})
>
> ENDIF(NOT (${buffer} STREQUAL ${file_contents}))
>
> SET_SOURCE_FILES_PROPERTIES(${pch_unity}  PROPERTIES COMPILE_FLAGS
> "/Yc\"${pch_abs}\"")
>
>
>
> ###########################################################
>
> #
>
> # Update properties of source files to use the precompiled header.
>
> # Additionally, force the inclusion of the precompiled header at beginning
> of each source file.
>
> #
>
> FOREACH(source_file ${srcFilesThatUsePCH} )
>
>    SET_SOURCE_FILES_PROPERTIES(
>
>      ${source_file}
>
>      PROPERTIES COMPILE_FLAGS
>
>      "/Yu\"${pch_abs}\" /FI\"${pch_abs}\""
>
>    )
>
> ENDFOREACH(source_file)
>
>
>
> ###########################################################
>
> #
>
> # Finally, update the source file collection to contain the precompiled
> header translation unit
>
> #
>
> SET(${FILES_VARIABLE_NAME} ${${FILES_VARIABLE_NAME}} ${pch_unity}
> PARENT_SCOPE)
>
>

For me I use the same exact macro that I have used since VS 2005.

Attached is the macro and here is an example library that uses the macro.

SET( ${PROJECT_NAME}_SRCS
	./src/smException.cxx
	./src/smitkIndent.cxx
	./src/smState.cxx
	./src/smPropertyMap.cxx
	./src/smOperation.cxx
	./src/smPgmSettings.cxx
	./src/smStringList.cxx
	./src/smObject.cxx
	./src/smAppBase.cxx
	./src/smSpawnJob.cxx
	./src/smLog.cxx
	./src/smBIRADS7.cxx
	./src/smErrorBase.cxx
)

SET( ${PROJECT_NAME}_EXT_HDRS
	./Include/smException.h
	./Include/smitkIndent.h
	./Include/smMacros.h
	./Include/smPropertyMap.h
	./Include/smOperation.h
	./Include/smPgmSettings.h
	./Include/smStringList.h
	./Include/smConstants.h
	./Include/smLog.h
	./Include/smBIRADS7.h
	./Include/smErrorBase.h
)

SET( ${PROJECT_NAME}_MOC_HDRS
	./Include/smState.h
	./Include/smObject.h
	./Include/smAppBase.h
	./Include/smSpawnJob.h
)

# some .ui files
SET( ${PROJECT_NAME}_UIS
)

# and finally an resource file
SET( ${PROJECT_NAME}_RCS
)

SET( ${PROJECT_NAME}_INT_HDRS

)

#Add precompiled header support
MSVC_PCH_SUPPORT(${PROJECT_NAME})

# this command will generate rules that will run rcc on all files from
UPMC_LA_RCS
# in result UPMC_LA_RC_SRCS variable will contain paths to files produced by rcc
QT4_ADD_RESOURCES( ${PROJECT_NAME}_RC_SRCS ${${PROJECT_NAME}_RCS} )

# and finally this will run moc:
QT4_WRAP_CPP( ${PROJECT_NAME}_MOC_SRCS ${${PROJECT_NAME}_MOC_HDRS} )

# this will run uic on .ui files:
QT4_WRAP_UI( ${PROJECT_NAME}_UI_HDRS ${${PROJECT_NAME}_UIS} )

IF(BUILD_EXPERIMENTAL)
add_subdirectory(Experimental)
ENDIF(BUILD_EXPERIMENTAL)

include_directories(
	${PROJECT_BINARY_DIR}
	${PROJECT_BINARY_DIR}/..
	${PROJECT_SOURCE_DIR}/Include
	${STUDY_MANAGER_SRC}/Include
)

add_library(${PROJECT_NAME}
	${${PROJECT_NAME}_SRCS}
	${${PROJECT_NAME}_EXT_HDRS}
	${${PROJECT_NAME}_MOC_HDRS}
	${${PROJECT_NAME}_MOC_SRCS}
	${${PROJECT_NAME}_INT_HDRS}
	${${PROJECT_NAME}_UI_HDRS}
	${${PROJECT_NAME}_RC_SRCS}
)

John
-------------- next part --------------
A non-text attachment was scrubbed...
Name: MSVCPCHSupport.cmake
Type: application/octet-stream
Size: 748 bytes
Desc: not available
URL: <http://www.cmake.org/pipermail/cmake/attachments/20120216/9589a22d/attachment.obj>


More information about the CMake mailing list