⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 boost.jam

📁 Boost provides free peer-reviewed portable C++ source libraries. We emphasize libraries that work
💻 JAM
字号:
# $Id: boost.jam 47443 2008-07-15 13:53:41Z bemandawes $# Copyright 2008 Roland Schwarz# Distributed under the Boost Software License, Version 1.0.# (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)# Boost library support module.# # This module allows to use the boost library from boost-build projects.# The location of a boost source tree or the path to a pre-built# version of the library can be configured from either site-config.jam# or user-config.jam. If no location  is configured the module looks for# a BOOST_ROOT environment variable, which should point to a boost source# tree. As a last resort it tries to use pre-built libraries from the standard# search path of the compiler.## If the location to a source tree is known, the module can be configured # from the *-config.jam files:## using boost : 1.35 : <root>/path-to-boost-root ;## If the location to a pre-built version is known:## using boost : 1.34 #   : <include>/usr/local/include/boost_1_34 #     <library>/usr/local/lib#   ;## It is legal to configure more than one boost library version in the config# files. The version identifier is used to disambiguate between them.# The first configured version becomes the default.## To use a boost library you need to put a 'use' statement into your# Jamfile:## import boost ;## boost.use-project 1.35 ;## If you don't care about a specific version you just can omit the version# part, in which case the default is picked up:## boost.use-project ;## The library can be referenced with the project identifier '/boost'. To # reference the program_options you would specify:## exe myexe : mysrc.cpp : <library>/boost//program_options ;## Note that the requirements are automatically transformed into suitable# tags to find the correct pre-built library.#import modules ;import errors ;import project ;import string ;import toolset ;import property-set ;import regex ;import common ;import option ;.boost.auto_config = [ property-set.create <layout>system ] ;if [ MATCH (--debug-configuration) : [ modules.peek : ARGV ] ]{    .debug-configuration = true ;}# Configuration of the boost library to use.## This can either be a boost source tree or# pre-built libraries. The 'version' parameter must be a valid boost# version number, e.g. 1.35, if specifying a pre-built version with# versioned layout. It may be a symbolic name, e.g. 'trunk' if specifying# a source tree. The options are specified as named parameters (like# properties). The following paramters are available:## <root>/path-to-boost-root: Specify a source tree.## <include>/path-to-include: The include directory to search.## <library>/path-to-library: The library directory to search.# # <layout>system or <layout>versioned.# # <build-id>my_build_id: The custom build id to use.#rule init (     version     # Version identifier.    : options * # Set the option properties.){    if $(.boost.$(version)) {        errors.user-error             "Boost " $(version) "already configured." ;    }    else {        if $(.debug-configuration) {            if ! $(.boost_default) {                echo notice: configuring default boost library $(version) ;            }            echo notice: configuring boost library $(version) ;        }        .boost_default ?= $(version) ; # the first configured is default        .boost.$(version) = [ property-set.create $(options) ] ;    }}# Use a certain version of the library.## The use-project rule causes the module to define a boost project of# searchable pre-built boost libraries, or references a source tree# of the boost library. If the 'version' parameter is omitted either# the configured default (first in config files) is used or an auto# configuration will be attemted.# rule use-project (     version ? # The version of the library to use.){    project.push-current [ project.current ] ;    version ?= $(.boost_default) ;    version ?= auto_config ;        if $(.initialized) {        if $(.initialized) != $(version) {            errors.user-error                "Attempt to use" $(__name__) "with different parameters" ;        }    }    else {        if $(.boost.$(version)) {            local opt  = $(.boost.$(version)) ;            local root = [ $(opt).get <root> ] ;            local inc  = [ $(opt).get <include> ] ;            local lib  = [ $(opt).get <library> ] ;                        if $(.debug-configuration) {                echo notice: using boost library $(version) [ $(opt).raw ] ;            }                        .layout = [ $(opt).get <layout> ] ;            .layout ?= versioned ;            .build_id = [ $(opt).get <build-id> ] ;            .version_tag = [ regex.replace $(version) "[*\\/:.\"\' ]" "_" ] ;            .initialized = $(version) ;            if  ( $(root) && $(inc) )                 || ( $(root) && $(lib) )                || ( $(lib) && ! $(inc) )                || ( ! $(lib) && $(inc) ) {                errors.user-error                    "Ambiguous parameters,"                    "use either <root> or <inlude> with <library>." ;            }            else if ! $(root) && ! $(inc) {                root = [ modules.peek : BOOST_ROOT ] ;            }            local prj = [ project.current ] ;            local mod = [ $(prj).project-module ] ;            if $(root) {                modules.call-in $(mod) : use-project boost : $(root) ;            }            else {                project.initialize $(__name__) ;                # It is possible to overide the setup of the searched                # libraries per version. The (unlikely) tag 0.0.1 is                # meant as an example template only.                switch $(version) {                    case 0.0.1 : boost_0_0_1 $(inc) $(lib) ;                    case *    : boost_std $(inc) $(lib) ;                }            }        }        else {            errors.user-error                 "Reference to unconfigured boost version." ;        }    }    project.pop-current ;}rule boost_std ( inc ? lib ? ){#   The default definitions for pre-built libraries.    project boost        : usage-requirements <include>$(inc)        : requirements <tag>@tag_std <search>$(lib)        ;    alias headers ;    lib program_options  : : : :         <link>shared:<define>BOOST_PROGRAM_OPTIONS_DYN_LINK ;    lib thread           : : : :         <link>shared:<define>BOOST_THREAD_DYN_DLL  ;    lib iostreams        : : : :         <link>shared:<define>BOOST_IOSTREAMS_DYN_LINK ;    lib wave             : : : :         <link>shared:<define>BOOST_WAVE_DYN_LINK  ;    lib python           : : : :         <link>shared:<define>BOOST_PYTHON_DYN_LINK ;    lib serialization    : : : :         <link>shared:<define>BOOST_SERIALIZATION_DYN_LINK ;    lib graph            : : : :         <link>shared:<define>BOOST_GRAPH_DYN_LINK ;    lib date_time        : : : :         <link>shared:<define>BOOST_DATE_TIME_DYN_LINK ;    lib test             : : : :         <link>shared:<define>BOOST_TEST_DYN_LINK  ;    lib regex            : : : :         <link>shared:<define>BOOST_REGEX_DYN_LINK  ;    lib filesystem       : : : :         <link>shared:<define>BOOST_FILE_SYSTEM_DYN_LINK ;    lib signals          : : : :         <link>shared:<define>BOOST_SIGNALS_DYN_LINK  ;    lib function_types ;    lib mpi              : : : :         <link>shared:<define>BOOST_MPI_DYN_LINK  ;    lib system           : : : :         <link>shared:<define>BOOST_SYSTEM_DYN_LINK  ;}rule boost_0_0_1 ( inc ? lib ? ){    echo "You are trying to use an example placeholder for boost libs." ;    # Copy this template to another place (in the file boost.jam)    # and define a project and libraries modelled after the    # boost_std rule. Please note that it is also possible to have    # a per version taging rule in case they are different between    # versions.}rule tag_std ( name : type ? : property-set ){    name = boost_$(name) ;    if  ( [ $(property-set).get <link> ] in static ) &&        ( [ $(property-set).get <target-os> ] in windows )    {        name = lib$(name) ;    }    if $(.layout) = versioned    {        version = $(.version_tag) ;        toolset = <toolset> ;    }    return [ common.format-name        <base> $(toolset) <threading> <runtime> -$(version) -$(.build_id)        : $(name) : $(type) : $(property-set) ] ;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -