是否可以使用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}
这将忽略有关重复符号的所有错误,并使链接器忽略任何重新定义。确保包含您要使用的符号的目标文件位于列表中的任何重新定义之前。