0

我有几个 .c 和自定义 .h 文件,我想使用 Makefile 将它们链接在一起,但是我尝试过的所有内容都得到了与我想要的不同的结果。

基本上,我有以下文件:rA.c、rA.h、rB.c、rB.h、rC.c、rC.h、rP.c

我想要使​​用生成文件来结束与以下命令的等效项: gcc -o rv rA.c rB.c rC.c rP.c

并产生一个可执行的“rv”文件。到目前为止,我所做的所有方法(诚然,已经被击中了)已经为每个 .c 文件产生了中间 .o 文件,但没有最终的 rv 可执行文件。任何建议将不胜感激。

4

3 回答 3

1
FILES.o = rA.o rB.o rC.o rP.o
PROGRAM = rv

all: ${PROGRAM}

${PROGRAM}: ${FILES.o}
    ${CC} -o $@ ${CFLAGS} ${FILES.o} ${LDFLAGS} ${LDLIBS}

您可以根据需要添加依赖项和其他花里胡哨,但这是最小 makefile 的基本轮廓。

如果您确定使用GNUmake,则可以使用简写符号来更多地缩写命令行:

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

显示的第一个符号适用于make您可能使用的任何版本。

于 2013-01-30T05:32:17.717 回答
0

你不想要那个结果命令。当您添加更多文件时,它不能很好地扩展。

你想要的是一个看起来像这样的makefile:

rv: rA.o rB.o rC.o rP.o
    $(CC) -o $@ $+

这会将gcc每个单独.c的文件构建成一个目标文件,然后将所有目标文件链接到您的可执行文件中。

于 2013-01-30T05:31:42.800 回答
0

您可以使用 Makefile 来摆脱困境,如下所示:

rv: rA.o rB.o rC.o rP.o
    $(CC) -o $@ $^ $(CFLAGS)
于 2013-01-30T05:35:33.087 回答