是否可以使用makefile链接两个C文件,而makefile调用彼此的函数,但是它们都有自己的main函数。

例如:
C1.c使用来自C2.c.的函数f(),但都具有main功能,我希望C1.c中的main仅被视为main

FILES.o=set.o hash.o printnfa.o input.o nfa.o dfa.o terp.o minimize.o defnext.o print_ar.o pairs.o squash.o signon.o print.o lex.o assort.o prnt.o printv.o bintoasc.o ferr.o onferr.o fputstr.o pchar.o driver.o searchenv.o hashadd.o esc.o

PROGRAM= Lexer
INC := -I./debug.h -I./global.h -I./stack.h -I./set.h -I./hash.h
CFLAGS=-DMAIN
all: ${PROGRAM}

${PROGRAM}: ${FILES.o}
${CC} -o $@ ${CFLAGS} $(INC) $^ ${LDFLAGS} ${LDLIBS}


现在,terp.c具有main,而lex.c也具有main。我只希望lex.c的main被考虑。

最佳答案

这将特定于您使用的链接器。在Linux上,可以将--allow-multiple-definition标志传递给链接器,以便在有多个定义的情况下仅使用第一个符号:

${PROGRAM}: ${FILES.o}
${CC} -Xlinker --allow-multiple-definition -o $@ ${CFLAGS} $(INC) $^ ${LDFLAGS} ${LDLIBS}


这将忽略有关重复符号的所有错误,并使链接器忽略任何重新定义。确保包含您要使用的符号的目标文件位于列表中的任何重新定义之前。

10-06 10:23
查看更多