Makefile C Ubuntu-存在问题
我有3个文件:MyLib.h MyLib.c Tester.c 我一直在尝试创建makefile,但事实证明这很困难 当它只有一个文件时,我可以这样做,就像下面我编译Hello.c的地方一样 我看过一些例子,但它们似乎比我下面使用的要复杂得多——这对我来说是有意义的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
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例如。