mirror of
https://github.com/boostorg/build.git
synced 2026-02-16 13:22:11 +00:00
98 lines
2.7 KiB
Plaintext
98 lines
2.7 KiB
Plaintext
# Copyright (c) 2005 Reece H. Dunn.
|
|
# Copyright 2006 Ilya Sokolov
|
|
#
|
|
# Use, modification and distribution is subject to the Boost Software
|
|
# License Version 1.0. (See accompanying file LICENSE_1_0.txt or
|
|
# http://www.boost.org/LICENSE_1_0.txt)
|
|
|
|
##### Using Precompiled Headers (Quick Guide) #####
|
|
#
|
|
# Make precompiled mypch.hpp:
|
|
#
|
|
# import pch ;
|
|
#
|
|
# cpp-pch mypch
|
|
# : # sources
|
|
# mypch.hpp
|
|
# : # requiremnts
|
|
# <toolset>msvc:<source>mypch.cpp
|
|
# ;
|
|
#
|
|
# Add cpp-pch to sources:
|
|
#
|
|
# exe hello
|
|
# : main.cpp hello.cpp mypch
|
|
# ;
|
|
|
|
import "class" : new ;
|
|
import type ;
|
|
import feature ;
|
|
import generators ;
|
|
|
|
type.register PCH : pch ;
|
|
|
|
type.register C_PCH : : PCH ;
|
|
type.register CPP_PCH : : PCH ;
|
|
|
|
# control precompiled header (PCH) generation
|
|
feature.feature pch :
|
|
on
|
|
off
|
|
: propagated
|
|
;
|
|
|
|
feature.feature pch-header : : free dependency ;
|
|
feature.feature pch-file : : free dependency ;
|
|
|
|
# Base PCH generator. The 'run' method has the logic to
|
|
# prevent this generator from being run unless it's used
|
|
# in top-level PCH target.
|
|
class pch-generator : generator
|
|
{
|
|
import property-set ;
|
|
|
|
rule action-class ( )
|
|
{
|
|
return compile-action ;
|
|
}
|
|
|
|
rule run ( project name ? : property-set : sources + )
|
|
{
|
|
if ! $(name)
|
|
{
|
|
# Unless this generator is invoked as the top-most
|
|
# generator for a main target, fail. This allows using
|
|
# 'H' type as input type for this generator, while
|
|
# preventing Boost.Build to try this generator when not
|
|
# explicitly asked for.
|
|
#
|
|
# One bad example is msvc, where pch generator produces
|
|
# both PCH target and OBJ target, so if there's any
|
|
# header generated (like by bison, or by msidl), we'd
|
|
# try to use pch generator to get OBJ from that H, which
|
|
# is completely wrong. By restricting this generator
|
|
# only to pch main target, such problem is solved.
|
|
}
|
|
else
|
|
{
|
|
local r = [ run-pch $(project) $(name)
|
|
: [ $(property-set).add-raw <define>BOOST_BUILD_PCH_ENABLED ]
|
|
: $(sources) ] ;
|
|
return [ generators.add-usage-requirements $(r)
|
|
: <define>BOOST_BUILD_PCH_ENABLED ] ;
|
|
}
|
|
}
|
|
|
|
# This rule must be overridden by the derived classes.
|
|
rule run-pch ( project name ? : property-set : sources + )
|
|
{
|
|
}
|
|
}
|
|
|
|
# NOTE: requiremetns are empty,
|
|
# default pch generator can be applied when pch=off
|
|
generators.register [
|
|
new dummy-generator pch.default-c-pch-generator : : C_PCH ] ;
|
|
generators.register [
|
|
new dummy-generator pch.default-cpp-pch-generator : : CPP_PCH ] ;
|