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

📄 gener.c

📁 CC386 is a general-purpose 32-bit C compiler. It is not an optimizing compiler but given that the co
💻 C
📖 第 1 页 / 共 2 页
字号:
            iter0( DEFINED, masm_def );
            break;
        case ASSEMBLER_WASM:
            fprintf( frsp, "AS      = WASM\n" );
            fprintf( frsp, "AS_OPT  = -4ps -fpi87 -q -mf %s -i=$(PATH_INC)",
                ( ( options & _OPT_DEBUG ) ? "-d1" : "" ) );
            iter0( DEFINED, masm_def );
            break;
        default:
            fprintf( stderr, "Use unknow assembler !\n" );
            exit(-1);
    }
    fprintf( frsp, "\n\n" );

    fprintf( frsp, "### Linker\n" );
    switch ( linker ) {

        case LINKER_TLINK:

            if ( dosx != DOSX_PMODE ) {
                fprintf( stderr, "Warning : TLINK use only with PMODE !\n" );
                dosx = DOSX_PMODE;
            }

            fprintf( frsp, "LNK     = TLINK\n"
                           "LNK_OPT = /3/c/d" );

            if ( options & _OPT_MAPFILE )
                    fprintf( frsp, "/m/l/s" );
            else
                    fprintf( frsp, "/x" );

            if ( options & _OPT_DEBUG )
                fprintf( frsp, "/v" );

            break;

        case LINKER_LINK:

            if ( dosx != DOSX_PMODE ) {
                fprintf( stderr, "Warning : LINK use only with PMODE !\n" );
                dosx = DOSX_PMODE;
            }

            fprintf( frsp, "LNK     = LINK\n"
                           "LNK_OPT = /NOIGNORECASE" );

            if ( options & _OPT_MAPFILE )
                fprintf( frsp, " /MAP" );

            break;

        case LINKER_VALX:
            if ( dosx != DOSX_PMODE ) {
                fprintf( stderr, "Warning : VALX use only with PMODE !\n" );
                dosx = DOSX_PMODE;
            }

            fprintf( frsp, "LNK     = VALX\n" 
                           "LNK_OPT = -NOCA -USE32" );

            if ( options & _OPT_MAPFILE )
                fprintf( frsp,  " -MAP" );
            else
                fprintf( frsp, " -NOMAP" );

            break;

        case LINKER_WLINK:
            if ( dosx == DOSX_PMODE ) {
                fprintf( stderr, "Warning : WLINK can't use with PMODE ! Use DOS4G ...\n" );
                dosx = DOSX_DOS4G;
            }

            fprintf( frsp, "LNK     = WLINK\n"
                           "LNK_OPT =" );

            if ( options & _OPT_DEBUG )
                fprintf( frsp, " debug all op symf" );

            break;

        default:
            fprintf( stderr, "Use unknow linker !\n" );
            exit(-1);
    }
    fprintf( frsp, "\n\n" );

    fprintf( frsp, "### Path to default lib & obj\n" );
    iter0( PATH_LIB, linker_libpath );
    if ( libpath == NULL )
        libpath = ".";
    fprintf( frsp, "LIBPATH = %s\n\n", libpath );

    fprintf( frsp, "### Default lib & obj\n" );
    if ( !( options & _OPT_NODEFLIB ) ) {
        if ( dosx == DOSX_PMODE ) {
            if ( options & _OPT_DEBUG )
                fprintf( frsp, "DEFOBJ  = $(LIBPATH)\\C0DOSD.OBJ\n" );
            else
                fprintf( frsp, "DEFOBJ  = $(LIBPATH)\\C0DOS.OBJ\n" );
        }
        else
            fprintf( frsp, "DEFOBJ  = $(LIBPATH)\\C0DOSW.OBJ\n" );
        fprintf( frsp, "DEFLIB  = $(LIBPATH)\\CLDOS.LIB\n" );
    }
    else {
        fprintf( frsp, "DEFOBJ  =\n" );
        fprintf( frsp, "DEFLIB  =\n" );
    }
    fprintf( frsp, "\n" );

    fprintf( frsp, "### Name of .EXE file\n" 
                   "EXENAME = %s\n\n", exename );

    fprintf( frsp, "### Name of .MAP file\n" );
    if ( options & _OPT_MAPFILE )
        fprintf( frsp, "MAPNAME = %s.MAP\n\n", exename );
    else
        fprintf( frsp, "MAPNAME = NUL\n\n", exename );

    fprintf( frsp, "### .OBJ file(s)\n" 
                   "OBJS    = \\\n" );
    iter0( FILE_OBJ, make_list );
    fprintf( frsp, "\n" );

    fprintf( frsp, "### .LIB file(s)\n" 
                   "LIBS    = \\\n" );
    iter0( FILE_LIB, make_list );
    fprintf( frsp, "\n\n" );

    fprintf( frsp, "### Main depend\n" 
                   "$(EXENAME).EXE : makefile. $(OBJS) $(LIBS)\n" );
    
    fprintf( frsp, "\t $(LNK) $(LNK_OPT) @&&|\n" );

    switch( linker ) {
        case LINKER_TLINK:
        case LINKER_LINK:
            fprintf( frsp, "\t$(DEFOBJ) $(OBJS)\n\t @echo $(EXENAME).EXE\n\t @echo $(MAPNAME)\n\t @echo $(DEFLIB) $(LIBS)\n" );
            break;
        case LINKER_VALX:
            fprintf( frsp, "\t\"$(DEFOBJ)\" $(OBJS),$(EXENAME).EXE,$(MAPNAME),\"$(DEFLIB)\" $(LIBS)\n" );
            break;
        case LINKER_WLINK:
            fprintf( frsp, "\tformat os2 le\n"
                           "\top nod\n"
                           "\top quiet\n" );
            switch ( dosx ) {
                case DOSX_PMODEW :
                    fprintf( frsp, "\top osname='CC386+PMODE/W'\n"
                                   "\top stub=$(LIBPATH)\\PMODEW.EXE\n" );
                break;
                case DOSX_WDOSX :
                    fprintf( frsp, "\top osname='CC386+WDOSX'\n"
                                   "\top stub=$(LIBPATH)\\WDOSXLE.EXE\n" );
                break;
                case DOSX_DOS32A :
                    fprintf( frsp, "\top osname='CC386+DOS/32A'\n"
                                   "\top stub=$(LIBPATH)\\DOS32A.EXE\n" );
                break;
                case DOSX_ZRDX :
                    fprintf( frsp, "\top osname='CC386+ZRDX'\n"
                                   "\top stub=$(LIBPATH)\\ZRDX.EXE\n" );
                break;
                case DOSX_CAUSEWAY :
                    fprintf( frsp, "\top osname='CC386+CAUSEWAY'\n"
                                   "\top stub=$(LIBPATH)\\CAUSEWAY.EXE\n" );
                break;
                default:
                case DOSX_DOS4G :
                    fprintf( frsp, "\top osname='CC386+DOS/4G[W]'\n"
                                   "\top stub=$(LIBPATH)\\4GSTUB.EXE\n" );
                    break;
            }
            fprintf( frsp, "\tname $(EXENAME).EXE\n"
                           "\top map=$(MAPNAME)\n" );

            if ( !( options & _OPT_NODEFLIB ) )
                fprintf( frsp, "\tfile $(DEFOBJ)\n" );

            iter0( FILE_OBJ, wlink_obj );

            if ( !( options & _OPT_NODEFLIB ) )
                fprintf( frsp, "\tlibrary $(DEFLIB)\n" );

            iter0( FILE_LIB, wlink_lib );
            break;

        default:
            fprintf( stderr, "Use unknow linker !\n" );
            exit(-1);
    }

    fprintf( frsp, "|\n" );


    if ( !(options & _OPT_KEEPRSP ) )
        fprintf( frsp, "\t Del $(EXENAME).LNK\n" );

    if ( !(options & _OPT_KEEPGEN ) ) {
        iter( FILE_ASM, delete_file );
//      iter( FILE_OBJ, delete_file );
    }

    fprintf( frsp, "\n");

//  fprintf( frsp, "### .LNK file\n" );
//  fprintf( frsp, "$(EXENAME).LNK : makefile. $(OBJS) $(LIBS)\n" );

    iter0( FILE_CPP, make_cpp );
    iter( FILE_ASM, make_asm );

    close_rsp();

    if ( options & _OPT_RUNMAKE ) {
        switch( maker ) {
            case MAKER_MAKE :
                exec( "MAKE", ( options & _OPT_BUILDALL ) ? "-B" : "" );
                break;
            case MAKER_IMAKE :
                exec( "IMAKE", ( options & _OPT_BUILDALL ) ? "-B" : ""  );
                break;
            case MAKER_WMAKE :
                exec( "WMAKE", ( options & _OPT_BUILDALL ) ? "/a /u" : "/u"  );
                break;
            default:
                fprintf( stderr, "Use unknow maker !\n" );
                exit(-1);
        }
    }
}

⌨️ 快捷键说明

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