📄 rules.c
字号:
/*
* Control of the implicit suffix rules
*/
#include "h.h"
/*
* Return a pointer to the suffix of a name
*/
char *suffix(char *name)
{
return strrchr(name, '.');
}
/*
* Dynamic dependency. This routine applies the suffis rules
* to try and find a source and a set of rules for a missing
* target. If found, np is made into a target with the implicit
* source name, and rules. Returns TRUE if np was made into
* a target.
*/
bool
dyndep(np)
struct name * np;
{
register char * p;
register char * q;
register char * suff; /* Old suffix */
register char * basename; /* Name without suffix */
struct name * op; /* New dependent */
struct name * sp; /* Suffix */
struct line * lp;
struct depend * dp;
char * newsuff;
p = str1;
q = np->n_name;
if (!(suff = suffix(q)))
return FALSE; /* No suffix */
while (q < suff)
*p++ = *q++;
*p = '\0';
basename = setmacro("*", str1)->m_val;
if (!((sp = newname(".SUFFIXES"))->n_flag & N_TARG))
return FALSE;
for (lp = sp->n_line; lp; lp = lp->l_next)
for (dp = lp->l_dep; dp; dp = dp->d_next)
{
newsuff = dp->d_name->n_name;
if (strlen(suff)+strlen(newsuff)+1 >= LZ)
fatal("Suffix rule too long");
p = str1;
q = newsuff;
while (*p++ = *q++)
;
p--;
q = suff;
while (*p++ = *q++)
;
sp = newname(str1);
if (sp->n_flag & N_TARG)
{
p = str1;
q = basename;
if (strlen(basename) + strlen(newsuff)+1 >= LZ)
fatal("Implicit name too long");
while (*p++ = *q++)
;
p--;
q = newsuff;
while (*p++ = *q++)
;
op = newname(str1);
if (!op->n_time)
modtime(op);
if (op->n_time)
{
dp = newdep(op, 0);
newline(np, dp, sp->n_line->l_cmd, 0);
setmacro("<", op->n_name);
return TRUE;
}
}
}
return FALSE;
}
/*
* Make the default rules
*/
void
makerules()
{
struct cmd *cp;
struct name *np;
struct depend *dp;
setmacro("CC", "lcc");
setmacro("CFLAGS", "-O");
np = newname(".c.obj");
cp = newcmd("$(CC) $(CFLAGS) $<", 0);
newline(np, 0, cp, 0);
setmacro("AS", "lcc");
np = newname(".asm.obj");
cp = newcmd("$(AS) $<", 0);
newline(np, 0, cp, 0);
np = newname(".obj");
dp = newdep(np, 0);
np = newname(".asm");
dp = newdep(np, dp);
np = newname(".c");
dp = newdep(np, dp);
np = newname(".SUFFIXES");
newline(np, dp, 0, 0);
setmacro ("MAKE",myname);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -