mirror of
https://github.com/reactos/CMake.git
synced 2024-12-20 10:38:08 +00:00
9db3116226
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
60 lines
2.2 KiB
CMake
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()
|