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

📄 build.jam

📁 C++的一个好库。。。现在很流行
💻 JAM
📖 第 1 页 / 共 2 页
字号:
{
    local exe = $(<) ;
    if $(NT) || ( $(UNIX) && $(OS) = CYGWIN ) || $(VMS) { exe = $(exe:S=.exe) ; }
    LOCATE on $(exe) = $(locate-target) ;
    DEPENDS all : $(exe) ;
    .mkdir $(locate-target) ;
    if $(--link)
    {
        local objs = ;
        for local s in $(>)
        {
            # Translate any subdir elements into a simple file name.
            local o = [ MATCH "([^/]+)[/]?(.+)" : $(s) ] ;
            o = $(o:J=_) ;
            o = $(o:S=.o) ;
            objs += $(o) ;
            LOCATE on $(o) = $(locate-target) ;
            DEPENDS $(exe) : $(o) ;
            DEPENDS $(o) : $(s) ;
            DEPENDS $(o) : $(locate-target) ;
            [COMPILE] $(o) : $(s) ;
            .clean $(o) ;
        }
        DEPENDS $(exe) : $(objs) ;
        DEPENDS $(exe) : $(locate-target) ;
        [COMPILE.LINK] $(exe) : $(objs) ;
        .clean $(exe) ;
    }
    else
    {
        DEPENDS $(exe) : $(>) ;
        DEPENDS $(exe) : $(locate-target) ;
        [COMPILE] $(exe) : $(>) ;
        .clean $(exe) ;
    }
    return $(exe) ;
}
if ! $(--def[2]) { actions [COMPILE] {
    "$(--cc)" $(--bin)$(<:D=) $(--dir)$(<:D) $(--out)$(<) $(--def)$(--defs) $(--flags) "$(--libs)" $(>)
} }
else { actions [COMPILE] {
    "$(--cc)" $(--bin)$(<:D=) $(--dir)$(<:D) $(--out)$(<) $(--def[1])$(--defs:J=$(--def[2]))$(--def[3]) $(--flags) "$(--libs)" $(>)
} }
if $(VMS) { actions [COMPILE.LINK] {
    "$(--link)" $(--link-bin)$(<:D=) $(--link-dir)$(<:D) $(--link-out)$(<) $(--link-def)$(--link-defs) $(--link-flags) "$(--link-libs)" $(>J=", ")
} }
else { actions [COMPILE.LINK] {
    "$(--link)" $(--link-bin)$(<:D=) $(--link-dir)$(<:D) $(--link-out)$(<) $(--link-def)$(--link-defs) $(--link-flags) "$(--link-libs)" $(>)
} }

rule .link
{
    DEPENDS all : $(<) ;
    DEPENDS $(<) : $(>) ;
    [LINK] $(<) : $(>) ;
    .clean $(<) ;
}
if $(NT) { actions [LINK] {
    copy $(>) $(<)
} }
if $(UNIX) { actions [LINK] {
    ln -fs $(>) $(<)
} }
if $(VMS) { actions [LINK] {
    COPY/REPLACE $(>) $(<)
} }

rule .move
{
    DEPENDS $(<) : $(>) ;
    [MOVE] $(<) : $(>) ;
}
if $(NT) { actions [MOVE] {
    del /f $(<)
    rename $(>) $(<)
} }
if $(UNIX) { actions [MOVE] {
    mv -f $(>) $(<)
} }
if $(VMS) { actions [MOVE] {
    RENAME $(>) $(<)
} }

# Generate the grammar tokens table, and the real yacc grammar.
rule .yyacc
{
    local exe = [ .exe yyacc : yyacc.c ] ;
    NOUPDATE $(exe) ;
    DEPENDS $(<) : $(exe) $(>) ;
    LEAVES $(<) ;
    yyacc.exe on $(<) = $(exe:R=$(locate-target)) ;
    [YYACC] $(<) : $(>) ;
}
actions [YYACC] {
    $(--chmod+w)$(<[1])
    $(--chmod+w)$(<[2])
    "$(yyacc.exe)" $(<) $(>)
}
if $(grammar)
{
    .yyacc jamgram.y jamgramtab.h : jamgram.yy ;
}
else if $(debug)
{
    .exe yyacc : yyacc.c ;
}

# How to build the grammar.
if $(NT)
{
    SUFEXE = .exe ;
    # try some other likely spellings...
    PATH ?= $(Path) ;
    PATH ?= $(path) ;
}
SUFEXE ?= "" ;

yacc ?= [ GLOB $(PATH) : yacc$(SUFEXE) ] ;
yacc ?= [ GLOB $(PATH) : bison$(SUFEXE) ] ;
yacc ?= [ GLOB "$(ProgramFiles:J= )\\GnuWin32\\bin" "C:\\Program Files\\GnuWin32\\bin" : bison$(SUFEXE) ] ;
yacc = $(yacc[1]) ;
switch $(yacc:D=:S=)
{
    case bison : yacc += -d --yacc ;
    case yacc  : yacc += -d ;
}
if $(debug) && $(yacc)
{
    yacc += -t -v ;
}
yacc += $(YACCFLAGS) ;

rule .yacc
{
    DEPENDS $(<) : $(>) ;
    LEAVES $(<) ;
    [YACC] $(<) : $(>) ;
}
if $(NT) { actions [YACC] {
    "$(yacc)" $(>)
    if not errorlevel 1 (
        del /f $(<[1])
        rename y.tab$(<[1]:S) $(<[1])
        del /f $(<[2])
        rename y.tab$(<[2]:S) $(<[2])
    ) else set _error_ =
} }
if $(UNIX) { actions [YACC] {
    if ` "$(yacc)" $(>) ` ; then
        mv -f y.tab$(<[1]:S) $(<[1])
        mv -f y.tab$(<[2]:S) $(<[2])
    else
        exit 1
    fi
} }
if $(VMS) { actions [YACC] {
    IF "$(yacc)" $(>)
    THEN
        RENAME y_tab$(<[1]:S) $(<[1])
        RENAME y_tab$(<[2]:S) $(<[2])
    ENDIF
} }
if $(grammar) && ! $(yacc)
{
    EXIT "Could not find the 'yacc' tool, and therefore can not build the grammar." ;
}
if $(grammar) && $(yacc)
{
    .yacc jamgram.c jamgram.h : jamgram.y ;
}

# How to build the compiled in jambase.
rule .mkjambase
{
    local exe = [ .exe mkjambase : mkjambase.c ] ;
    DEPENDS $(<) : $(exe) $(>) ;
    LEAVES $(<) ;
    mkjambase.exe on $(<) = $(exe:R=$(locate-target)) ;
    [MKJAMBASE] $(<) : $(>) ;
}
actions [MKJAMBASE] {
    $(--chmod+w)$(<)
    $(mkjambase.exe) $(<) $(>)
}
if $(debug)
{
    .mkjambase jambase.c : Jambase ;
}

# How to build Jam.
rule .jam
{
    $(>).exe = [ .exe $(>) : $(jam.source) ] ;
    DEPENDS all : $($(>).exe) ;
    
    if $(debug)
    {
        $(<).exe = $(<:S=$($(>).exe:S)) ;
        LOCATE on $($(<).exe) = $(locate-target) ;
        .link $($(<).exe) : $($(>).exe) ;
        DEPENDS all : $($(<).exe) ;
    }
}
.jam jam : bjam ;

# Scan sources for header dependencies.
#	WARNING: Yes those are *REAL TABS* below. DO NOT CHANGE,
#	under any circumstances, to spaces!! And the tabs
#	indenting this are so that if someone is in the mood to
#	replace tabs they hit this comment, and hopefully notice
#	their error.
rule .scan
{
    HDRRULE on $(<:D=) = .hdr.scan ;
    HDRSCAN on $(<:D=) = "^[ 	]*#[ 	]*include[ 	]*([<\"][^\">]*[\">]).*$" ;
}
rule .hdr.scan
{
    local hdrs = [ GLOB . : $(>:D=) ] ;
    INCLUDES $(<:D=) : $(hdrs:D=) ;
    HDRRULE on $(>:D=) = .hdr.scan ;
    HDRSCAN on $(>:D=) = "^[ 	]*#[ 	]*include[ 	]*([<\"][^\">]*[\">]).*$" ;
}
.scan [ GLOB . : *.c ] ;

# Distribution making from here on out.
dist.license =
    #~ [ GLOB . : LICENSE_$(LICENSE).txt ] [ GLOB [ .path .. .. .. ] : LICENSE_$(LICENSE).txt ] ;
    [ GLOB . : LICENSE_$(LICENSE).txt ]
    [ GLOB [ .path .. .. .. ] : LICENSE_$(LICENSE).txt ]
    [ GLOB [ .path .. boost ] : LICENSE_$(LICENSE).txt ] ;
dist.docs =
    $(dist.license[1])
    index.html
    Porting
    Jam.html
    ;
dist.source =
    [ GLOB . : *.c *.h ]
    ;
dist.source = $(dist.source:D=)
    $(dist.docs)
    build.jam build.bat build.sh build_vms.com
    Jambase
    jamgram.y jamgram.yy
    [ .path debian changelog ]
    [ .path debian control ]
    [ .path debian copyright ]
    [ .path debian jam.man.sgml ]
    [ .path debian rules ]
    [ .path modules set.c ]
    [ .path modules path.c ]
    [ .path modules regex.c ]
    [ .path modules property-set.c ]
    [ .path modules sequence.c ]
    [ .path modules order.c ]
    boost-jam.spec
    ;
dist.bin =
    bjam
    ;
dist.bin =
    $(dist.license[1])
    $(dist.bin:S=$(bjam.exe:S))
    ;

if $(NT)
{
    zip ?= [ GLOB "$(ProgramFiles:J= )\\7-ZIP" "C:\\Program Files\\7-ZIP" : "7z.exe" "7zn.exe" ] ;
    zip ?= [ GLOB $(PATH) : zip.exe ] ;
    zip ?= zip ;
    zip = $(zip[1]) ;
    switch $(zip:D=:S=)
    {
        case 7z* : zip += a -r -tzip -mx=9 ;
        case zip  : zip += -9r ;
    }
    actions piecemeal [PACK] {
    "$(zip)" "$(<)" "$(>)"
    }
    actions piecemeal [ZIP] {
    "$(zip)" "$(<)" "$(>)"
    }
    actions piecemeal [COPY] {
    copy /Y "$(>)" "$(<)" >NUL:
    }
}
if $(UNIX)
{
    actions [PACK] {
    tar zcf "$(<)" "$(>)"
    }
    actions [ZIP] {
    gzip -c9 "$(>)" > "$(<)"
    }
    actions [COPY] {
    cp -Rpf "$(>)" "$(<)"
    }
}

# The single binary, compressed.
rule .binary
{
    local zip = ;
    if $(NT) { zip = $($(<).exe:S=.zip) ; }
    if $(UNIX) { zip = $($(<).exe:S=.tgz) ; }
    zip = $(zip:S=)-$(VERSION)-$(RELEASE)-$(platform)$(zip:S) ;
    DEPENDS $(zip) : $($(<).exe) ;
    DEPENDS dist : $(zip) ;
    #~ LOCATE on $(zip) = $(locate-target) ;
    if $(NT) { [ZIP] $(zip) : $($(<).exe) ; }
    if $(UNIX) { [PACK] $(zip) : $($(<).exe) ; }
    .clean $(zip) ;
}

# Package some file.
rule .package ( dst-dir : src-files + )
{
    local dst-files ;
    for local src-path in $(src-files)
    {
        local src-subdir = $(src-path:D) ;
        local src-file = $(src-path) ;
        while $(src-subdir:D) { src-subdir = $(src-subdir:D) ; }
        if $(src-subdir) = ".."
        {
            src-file = $(src-file:D=) ;
        }
        dst-files += $(src-file:R=$(dst-dir)) ;
    }
    
    local pack = ;
    if $(NT) { pack = $(dst-dir).zip ; }
    if $(UNIX) { pack = $(dst-dir).tgz ; }
    
    DEPENDS dist : $(pack) ;
    DEPENDS $(pack) : $(dst-files) ;
    
    local dst-files-queue = $(dst-files) ;
    for local src-path in $(src-files)
    {
        local dst-file = $(dst-files-queue[1]) ;
        dst-files-queue = $(dst-files-queue[2-]) ;
        DEPENDS $(dst-file) : $(src-path) $(dst-file:D) ;
        .mkdir $(dst-file:D) ;
        
        [COPY] $(dst-file) : $(src-path) ;
        .clean $(dst-file) ;
    }
    
    [PACK] $(pack) : $(dst-files) ;
    .clean $(pack) ;
}

# RPM distro file.
rpm-tool = [ GLOB $(PATH) : "rpmbuild" "rpm" ] ;
rule .rpm ( name : source )
{
    local rpm-arch = ;
    switch $(OSPLAT)
    {
        case X86       : rpm-arch ?= i386 ;
        case PPC       : rpm-arch ?= ppc ;
        case AXP       : rpm-arch ?= alpha ;
        # no guaranty for these:
        case IA64      : rpm-arch ?= ia64 ;
        case ARM       : rpm-arch ?= arm ;
        case SPARC     : rpm-arch ?= sparc ;
        case *         : rpm-arch ?= other ;
    }
    local target = $(name)-rpm ;
    NOTFILE $(target) ;
    DEPENDS dist : $(target) ;
    DEPENDS $(target) : $(name).$(rpm-arch).rpm $(name).src.rpm ;
    DEPENDS $(name).$(rpm-arch).rpm : $(source) ;
    DEPENDS $(name).src.rpm : $(name).$(rpm-arch).rpm ;
    docs on $(target) = $(dist.docs:J=" ") ;
    arch on $(target) = $(rpm-arch) ;
    if $(rpm-arch) = ppc { target-opt on $(target) = --target= ; }
    else { target-opt on $(target) = "--target " ; }
    [RPM] $(target) : $(source) ;
    .clean $(name).$(rpm-arch).rpm $(name).src.rpm ;
}
actions [RPM] {
    export BOOST_JAM_TOOLSET="$(toolset)"
    $(rpm-tool[1]) -ta $(target-opt)$(arch) $(>) | tee rpm.out
    cp `grep -e '^Wrote:' rpm.out | sed 's/^Wrote: //'` .
    rm -f rpm.out
}

# The distribution targets. Don't bother with the targets if
# distribution build not requested.
if dist in $(ARGV)
{
    #~ .binary bjam ;
    .package $(NAME)-$(VERSION) : $(dist.source) ;
    .package $(NAME)-$(VERSION)-$(RELEASE)-$(platform) : $(dist.bin) ;
    if $(rpm-tool)
    {
        .rpm $(NAME)-$(VERSION)-$(RELEASE) : $(NAME)-$(VERSION).tgz ;
    }
}

⌨️ 快捷键说明

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