Makefile C Ubuntu-存在问题

Makefile C Ubuntu-存在问题,makefile,Makefile,我有3个文件:MyLib.h MyLib.c Tester.c 我一直在尝试创建makefile,但事实证明这很困难 当它只有一个文件时,我可以这样做,就像下面我编译Hello.c的地方一样 我看过一些例子,但它们似乎比我下面使用的要复杂得多——这对我来说是有意义的 BINDIR = /usr/local/sbin CC = gcc CFLAGS = -O all: Hello Hello: Hello.o ${CC} ${CFLAGS} H

我有3个文件:MyLib.h MyLib.c Tester.c 我一直在尝试创建makefile,但事实证明这很困难

当它只有一个文件时,我可以这样做,就像下面我编译Hello.c的地方一样

我看过一些例子,但它们似乎比我下面使用的要复杂得多——这对我来说是有意义的

BINDIR =    /usr/local/sbin
CC =        gcc
CFLAGS =    -O

all:        Hello

Hello:  Hello.o
    ${CC} ${CFLAGS} Hello.o ${LDFLAGS} -o Hello


Hello.o:    Hello.c
    ${CC} ${CFLAGS} -c Hello.c


install:    all
    rm -f ${BINDIR}/Hello
    cp Hello ${BINDIR}/Hello



clean:
    rm -f Hello  *.o core core.* *.core
请帮忙

我每次打开电脑都在打字,现在有点烦了

gcc MyLib.c Tester.c -o Tester
粗糙但有效:

Tester:
    gcc MyLib.c Tester.c -o Tester
更好:

CC = gcc

Tester: MyLib.o Tester.o
    $(CC) $^ -o $@
我只想猜测一下依赖性:

MyLib.o Tester.o : MyLib.h

更复杂的makefile是可能的,但现在应该这样做。

假定
MyLib.h
是两个C文件的依赖项,您应该有如下内容:

# Variables

CC := gcc
CFLAGS := -O


# Link executable

Tester: MyLib.o Tester.o
    ${CC} MyLib.o Tester.o ${LDFLAGS} -o Tester


# Compile object files

MyLib.o: MyLib.c MyLib.h
    ${CC} ${CFLAGS} -c -o MyLib.o MyLib.c

Tester.o: Tester.c MyLib.h
    ${CC} ${CFLAGS} -c -o Tester.o Tester.c
而且,一旦掌握了工作原理,就可以使用自动变量作为减少代码重复的第二步:

# Variables

CC := gcc
CFLAGS := -O


# Link executable

Tester: MyLib.o Tester.o
    ${CC} $^ ${LDFLAGS} -o $@


# Compile object files

MyLib.o: MyLib.c MyLib.h
    ${CC} ${CFLAGS} -c -o $@ $<

Tester.o: Tester.c MyLib.h
    ${CC} ${CFLAGS} -c -o $@ $<
#变量
CC:=gcc
CFLAGS:=-O
#链接可执行文件
测试器:MyLib.o测试器.o
${CC}$^${LDFLAGS}-o$@
#编译对象文件
MyLib.o:MyLib.c MyLib.h
${CC}${CFLAGS}-c-o$@$<
Tester.o:Tester.c MyLib.h
${CC}${CFLAGS}-c-o$@$<

其中,
$@
替换为当前规则的目标名称,
$感谢否决票:(目标是什么?创建一个库,然后将tester链接到该库?或者只使用Mylib.ch]和tester.c创建一个二进制文件?它基本上会这样做:gcc Mylib.c tester.c-o tester例如。