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

📄 rc.jam

📁 Boost provides free peer-reviewed portable C++ source libraries. We emphasize libraries that work
💻 JAM
字号:
#  Copyright (C) Andre Hentz 2003. Permission to copy, use, modify, sell and#  distribute this software is granted provided this copyright notice appears in#  all copies. This software is provided "as is" without express or implied#  warranty, and with no claim as to its suitability for any purpose.#  #  Copyright (c) 2006 Rene Rivera.##  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)import type ;import generators ;import feature ;import errors ;import scanner ;import toolset : flags ;if [ MATCH (--debug-configuration) : [ modules.peek : ARGV ] ]{    .debug-configuration = true ;}type.register RC : rc ;rule init ( ){}# Configures a new resource compilation command specific to a condition,# usually a toolset selection condition. The possible options are:##     * <rc-type>(rc|windres) - Indicates the type of options the command#       accepts.## Even though the arguments are all optional, only when a command, condition,# and at minimum the rc-type option are given will the command be configured.# This is so that callers don't have to check auto-configuration values# before calling this. And still get the functionality of build failures when# the resource compiler can't be found.#rule configure ( command ? : condition ? : options * ){    local rc-type = [ feature.get-values <rc-type> : $(options) ] ;    if $(command) && $(condition) && $(rc-type)    {        flags rc.compile.resource .RC $(condition) : $(command) ;        flags rc.compile.resource .RC_TYPE $(condition) : $(rc-type:L) ;        flags rc.compile.resource DEFINES <define> ;        flags rc.compile.resource INCLUDES <include> ;        if $(.debug-configuration)        {            ECHO notice: using rc compiler :: $(condition) :: $(command) ;        }    }}rule compile.resource ( target : sources * : properties * ){    local rc-type = [ on $(target) return $(.RC_TYPE) ] ;    compile.resource.$(rc-type) $(target) : $(sources[1]) ;}actions compile.resource.rc{    "$(.RC)" -l 0x409 "-U$(UNDEFS)" "-D$(DEFINES)" -I"$(>:D)" -I"$(<:D)" -I"$(INCLUDES)" -fo "$(<)" "$(>)"}actions compile.resource.windres{    "$(.RC)" "-U$(UNDEFS)" "-D$(DEFINES)" -I"$(>:D)" -I"$(<:D)" -I"$(INCLUDES)" -o "$(<)" -i "$(>)"}actions quietly compile.resource.null{    as /dev/null -o "$(<)"}# Since it's a common practice to write# exe hello : hello.cpp hello.rc# we change the name of object created from RC file, to# avoid conflict with hello.cpp.# The reason we generate OBJ and not RES, is that gcc does not# seem to like RES files, but works OK with OBJ.# See http://article.gmane.org/gmane.comp.lib.boost.build/5643/## Using 'register-c-compiler' adds the build directory to INCLUDESgenerators.register-c-compiler rc.compile.resource : RC : OBJ(%_res) ;# Register scanner for resourcesclass res-scanner : scanner {    import regex virtual-target path scanner ;            rule __init__ ( includes * )    {        scanner.__init__ ;            self.includes = $(includes) ;    }        rule pattern ( )    {        return "(([^ ]+[ ]+(BITMAP|CURSOR|FONT|ICON|MESSAGETABLE|RT_MANIFEST)[ ]+([^ \"]+|\"[^\"]+\"))|(#include[ ]*(<[^<]+>|\"[^\"]+\")))" ;    }    rule process ( target : matches * : binding )    {        local angle = [ regex.transform $(matches) : "#include[ ]*<([^<]+)>" ] ;        local quoted = [ regex.transform $(matches) : "#include[ ]*\"([^\"]+)\"" ] ;        local res = [ regex.transform $(matches) : "[^ ]+[ ]+(BITMAP|CURSOR|FONT|ICON|MESSAGETABLE|RT_MANIFEST)[ ]+(([^ \"]+)|\"([^\"]+)\")" : 3 4 ] ;        # Icons and other includes may referenced as         #        # IDR_MAINFRAME ICON "res\\icon.ico"        #        # so we have to replace double backslashes to single ones.        res = [ regex.replace-list $(res) : "\\\\\\\\" : "/" ] ;        # CONSIDER: the new scoping rule seem to defeat "on target" variables.        local g = [ on $(target) return $(HDRGRIST) ] ;          local b = [ NORMALIZE_PATH $(binding:D) ] ;        # Attach binding of including file to included targets.        # When target is directly created from virtual target        # this extra information is unnecessary. But in other        # cases, it allows to distinguish between two headers of the         # same name included from different places.              # We don't need this extra information for angle includes,        # since they should not depend on including file (we can't        # get literal "." in include path).        local g2 = $(g)"#"$(b) ;               angle = $(angle:G=$(g)) ;        quoted = $(quoted:G=$(g2)) ;        res = $(res:G=$(g2)) ;                local all = $(angle) $(quoted) ;        INCLUDES $(target) : $(all) ;        DEPENDS $(target) : $(res) ;        NOCARE $(all) $(res) ;        SEARCH on $(angle) = $(self.includes:G=) ;        SEARCH on $(quoted) = $(b) $(self.includes:G=) ;        SEARCH on $(res) = $(b) $(self.includes:G=) ;                # Just propagate current scanner to includes, in a hope        # that includes do not change scanners.         scanner.propagate $(__name__) : $(angle) $(quoted) : $(target) ;    }        }scanner.register res-scanner : include ;type.set-scanner RC : res-scanner ;

⌨️ 快捷键说明

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