📄 main.c
字号:
/*
* make [-f makefile] [-ins] [target(s) ...]
*
* (Better than EON mk but not quite as good as UNIX make)
*
* -f makefile name
* -i ignore exit status
* -n Pretend to make
* -p Print all macros & targets
* -q Question up-to-dateness of target. Return exit status 1 if not
* -r Don't not use inbuilt rules
* -s Make silently
* -t Touch files instead of making them
*/
#include "h.h"
char *myname;
char *prgversion = "1.04";
FILE *ifd; /* Input file desciptor */
bool domake = TRUE; /* Go through the motions option */
bool ignore = FALSE; /* Ignore exit status option */
bool silent = FALSE; /* Silent option */
bool print = FALSE; /* Print debuging information */
bool rules = TRUE; /* Use inbuilt rules */
bool dotouch = FALSE; /* Touch files instead of making */
bool quest = FALSE; /* Question up-to-dateness of file */
char *makefile = NULL; /* The make file */
int _stdcall CtrlHandler(unsigned long event)
{
printf("make: Killed\n");
exit(1);
}
int main(int argc,char **argv)
{
register char *p; /* For argument processing */
int estat = 0; /* For question */
int arg;
register struct name *np;
long clockStart = clock();
myname = argv[0];
for (arg = 1;arg < argc;arg++)
{
p = argv[arg];
if (*p++ != '-')
break;
while (*p != '\0')
{
if (*p == 'n') { /* Pretend mode */
domake = FALSE;
p++;
continue;
}
if (*p == 'i') { /* Ignore fault mode */
ignore = TRUE;
p++;
continue;
}
if (*p == 's') { /* Silent about commands */
silent = TRUE;
p++;
continue;
}
if (*p == 'p') {
print = TRUE;
p++;
continue;
}
if (*p == 'r') {
rules = FALSE;
p++;
continue;
}
if (*p == 't') {
dotouch = TRUE;
p++;
continue;
}
if (*p == 'q') {
quest = TRUE;
p++;
continue;
}
if (*p == 'f') { /* Alternate file name */
if (p[1] != '\0') {
makefile = &p[1];
arg ++;
break; /* while (*p != 0) */
}
if (arg == argc) {
usage(1);
return -1;
}
makefile = argv[++arg];
break; /* while (*p != 0) */
}
usage( (*p == 'h') ? 1 : 0); /* help or default : ??? */
} /* while (*p != 0) */
} /* for (arg = 1;arg < argc;arg++) */
if (makefile == NULL)
makefile = DEFN1;
SetConsoleCtrlHandler((void *)CtrlHandler,1);
ifd = fopen(makefile,"r");
if (ifd == NULL)
fatal("Can't open %s",makefile);
makerules();
setmacro("$", "$");
setmacro("MAKEFILE",makefile);
while (arg < argc)
{
char buffer[128];
strcpy(buffer,argv[arg]);
if ((p = strchr(buffer,'=')) == NULL)
break;
*p++ = '\0';
setmacro(buffer, p);
arg++;
}
input(ifd); /* Input all the gunga */
fclose(ifd); /* Finished with makefile */
lineno = 0; /* Any calls to error now print no line number */
if (print)
prt(); /* Print out structures */
np = newname(".SILENT");
if (np->n_flag & N_TARG)
silent = TRUE;
np = newname(".IGNORE");
if (np->n_flag & N_TARG)
ignore = TRUE;
precious();
if (!firstname)
fatal("No targets defined");
circh(); /* Check circles in target definitions */
if (arg >= argc) {
estat = make(firstname, 0);
} else {
while (arg < argc)
estat |= make(newname(argv[arg++]), 0);
}
SetConsoleCtrlHandler((void *)CtrlHandler,0);
printf("Time: %g seconds\n",(double)(clock() - clockStart)/1000.0);
if (quest)
exit(estat);
else
exit(0);
}
usage(exitvalue)
int exitvalue;
{
fprintf(stderr,
"make version %s ("__DATE__")\n"
"Usage:\n"
" %s [-f makefile] [-inpqrst] [macro=val ...] [target...]\n"
" Options :\n"
" -f makefile name\n"
" -i ignore exit status\n"
" -n Pretend to make\n"
" -p Print all macros & targets\n"
" -q Question up-to-dateness of target. (1 = not up to date)\n"
" -r Don't not use inbuilt rules\n"
" -s Make silently\n"
" -t Touch files instead of making them\n"
" -h This help menu\n\n",
prgversion,myname);
exit(exitvalue);
}
void fatal(const char *msg,...)
{
va_list msgargs;
fprintf(stderr, "%s: ", myname);
va_start (msgargs,msg);
vfprintf(stderr, msg, msgargs);
va_end (msgargs);
fputc('\n', stderr);
exit(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -