diff --git a/CMakeLists.txt b/CMakeLists.txt index 4f5e7a4db..78865aa53 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -27,6 +27,8 @@ endif() INCLUDE (FindPkgConfig) INCLUDE_DIRECTORIES( include ) +INCLUDE (PrecompiledHeader) + # If this is an in-source build (CMAKE_SOURCE_DIR == CMAKE_BINARY_DIR), # write the library/executable files to the respective directories in the # source tree. During an out-of-source build, however, do not litter this diff --git a/cmake-modules/PrecompiledHeader.cmake b/cmake-modules/PrecompiledHeader.cmake new file mode 100644 index 000000000..07879f466 --- /dev/null +++ b/cmake-modules/PrecompiledHeader.cmake @@ -0,0 +1,25 @@ +MACRO(ADD_MSVC_PRECOMPILED_HEADER PrecompiledHeader PrecompiledSource SourcesVar) + IF(MSVC) + GET_FILENAME_COMPONENT(PrecompiledBasename ${PrecompiledHeader} NAME_WE) + SET(PrecompiledBinary "${CMAKE_CURRENT_BINARY_DIR}/${PrecompiledBasename}.pch") + SET(Sources ${${SourcesVar}}) + + SET_SOURCE_FILES_PROPERTIES(${PrecompiledSource} + PROPERTIES COMPILE_FLAGS "/Yc\"${PrecompiledHeader}\" /Fp\"${PrecompiledBinary}\"" + OBJECT_OUTPUTS "${PrecompiledBinary}") + + # Do not consider .c files + foreach(fname ${Sources}) + GET_FILENAME_COMPONENT(fext ${fname} EXT) + if(fext STREQUAL ".cpp") + SET_SOURCE_FILES_PROPERTIES(${fname} + PROPERTIES COMPILE_FLAGS "/Yu\"${PrecompiledBinary}\" /FI\"${PrecompiledBinary}\" /Fp\"${PrecompiledBinary}\"" + OBJECT_DEPENDS "${PrecompiledBinary}") + endif(fext STREQUAL ".cpp") + endforeach(fname) + + ENDIF(MSVC) + # Add precompiled header to SourcesVar + LIST(APPEND ${SourcesVar} ${PrecompiledSource}) + +ENDMACRO(ADD_MSVC_PRECOMPILED_HEADER) \ No newline at end of file diff --git a/code/CMakeLists.txt b/code/CMakeLists.txt index de140ed5e..411795b6d 100644 --- a/code/CMakeLists.txt +++ b/code/CMakeLists.txt @@ -58,8 +58,6 @@ SET( PUBLIC_HEADERS SET( Core_SRCS Assimp.cpp - AssimpPCH.cpp - AssimpPCH.h ) SET( Boost_SRCS @@ -620,7 +618,7 @@ else (UNZIP_FOUND) SET (unzip_compile_SRCS ${unzip_SRCS}) endif (UNZIP_FOUND) -SET( assim_src +SET( assimp_src # Assimp Files ${Core_SRCS} ${Common_SRCS} @@ -681,13 +679,16 @@ SET( assim_src ${PUBLIC_HEADERS} ${COMPILER_HEADERS} ) + +ADD_MSVC_PRECOMPILED_HEADER("AssimpPCH.h" "AssimpPCH.cpp" assimp_src) + IF ( ASSIMP_BUILD_STATIC_LIB ) ADD_LIBRARY( assimp STATIC - ${assim_src} + ${assimp_src} ) ELSE ( ASSIMP_BUILD_STATIC_LIB ) ADD_LIBRARY( assimp SHARED - ${assim_src} + ${assimp_src} ) ENDIF ( ASSIMP_BUILD_STATIC_LIB )