CMake/Tests/PrecompiledHeader/CMakeLists.txt
Kitware Robot 9db3116226 Remove CMake-language block-end command arguments
Ancient versions of CMake required else(), endif(), and similar block
termination commands to have arguments matching the command starting the
block.  This is no longer the preferred style.

Run the following shell code:

for c in else endif endforeach endfunction endmacro endwhile; do
    echo 's/\b'"$c"'\(\s*\)(.\+)/'"$c"'\1()/'
done >convert.sed &&
git ls-files -z -- bootstrap '*.cmake' '*.cmake.in' '*CMakeLists.txt' |
egrep -z -v '^(Utilities/cm|Source/kwsys/)' |
egrep -z -v 'Tests/CMakeTests/While-Endwhile-' |
xargs -0 sed -i -f convert.sed &&
rm convert.sed
2012-08-13 14:19:16 -04:00

60 lines
2.2 KiB
CMake

cmake_minimum_required (VERSION 2.6)
project(PrecompiledHeader C)
# Make sure the proper compiler is in use.
if(NOT MSVC AND NOT "${CMAKE_C_COMPILER_ID}" MATCHES "^(Intel)$")
message(FATAL_ERROR "The PrecompiledHeader test works only with MSVC or Intel")
endif()
# Compute a custom name for the precompiled header.
if(CMAKE_CONFIGURATION_TYPES)
set(PCH_DIR "${CMAKE_CURRENT_BINARY_DIR}/PCH/${CMAKE_CFG_INTDIR}")
foreach(cfg ${CMAKE_CONFIGURATION_TYPES})
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/PCH/${cfg})
endforeach()
else()
set(PCH_DIR "${CMAKE_CURRENT_BINARY_DIR}/PCH")
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/PCH)
endif()
# The VS6 IDE does not support renaming .pch files with /Fp.
if("${CMAKE_GENERATOR}" MATCHES "Visual Studio 6")
set(PCH_USE_INCLUDE_DIR 1)
set(PCH_FILE)
else()
set(PCH_USE_INCLUDE_DIR 0)
set(PCH_FILE "\"/Fp${PCH_DIR}/foo_precompiled.pch\"")
endif()
# Choose between an explicit include path and using /I during
# precompilation. The /I form is used to test that the PCH is
# actually used. In practice the include path form would be used.
if(PCH_USE_INCLUDE_DIR)
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)
else()
set(PCH_INCLUDE_DIR "\"/I${CMAKE_CURRENT_SOURCE_DIR}/include\"")
endif()
# Create a target that will use a precompiled header.
set(foo_SRCS foo1.c foo2.c)
add_executable(foo foo_precompile.c ${foo_SRCS})
# Setup flags on the target to create and use the precompiled header.
set_target_properties(foo PROPERTIES
COMPILE_FLAGS "/Yufoo_precompiled.h /FIfoo_precompiled.h ${PCH_FILE}")
set_source_files_properties(foo_precompile.c PROPERTIES
COMPILE_FLAGS "/Ycfoo_precompiled.h ${PCH_INCLUDE_DIR}")
# Setup dependencies for precompiled header creation and use. The VS
# IDE takes care of this automatically.
if("${CMAKE_GENERATOR}" MATCHES "Makefile" OR
"${CMAKE_GENERATOR}" MATCHES "Ninja")
# This source file creates the precompiled header as a side-effect.
set_source_files_properties(foo_precompile.c PROPERTIES
OBJECT_OUTPUTS "${PCH_DIR}/foo_precompiled.pch")
# These source files use the precompiled header.
set_source_files_properties(${foo_SRCS} PROPERTIES
OBJECT_DEPENDS "${PCH_DIR}/foo_precompiled.pch")
endif()