是否可以使用 makefile 链接两个 C 文件,这两个 C 文件相互调用函数,但两者都有自己的 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}
这将忽略所有关于重复符号的错误,并导致链接器忽略任何重新定义。确保包含您希望使用的符号的目标文件出现在列表中的任何重新定义之前。
关于c - 在c中链接具有多个主要功能的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22665187/