gpt4 book ai didi

创建一个更通用的 makefile

转载 作者:太空宇宙 更新时间:2023-11-04 03:16:54 25 4
gpt4 key购买 nike

我有以下生成文件:

CC=gcc
CFLAGS= ---
LDFLAGS = ---

all: abc_test
abc_test: abc_test.o defn_abc.o abc.o cmocka_compass.o
$(CC) $(LDFLAGS) abc_test.o defn_abc.o abc.o cmocka_compass.o -o
abc_test
abc_test.o : abc_test.c
$(CC) $(CFLAGS) abc_test.c
defn_abc.o : ../defn_abc.c
$(CC) $(CFLAGS) ../defn_abc.c
abc.o : ../abc.c
$(CC) $(CFLAGS) ../abc.c
knownfile.o : ../../../../../knownpath.c
$(CC) $(CFLAGS) ../../../../../knownpath.c
clean:
rm *o *.log abc_test

哪个可行(更改了一些文件名)但我想让它通用。我尝试了以下操作,但我不断收到没有目标的错误消息。

CC=gcc
CFLAGS= ---
LDFLAGS = ---

SRCFILES := $(shell find ../ -name '*.c')
OBJFILES := $(patsubst %.c,%.o,%(SRCFILES))

OBJFILES: all
all: $(OBJFILES)

%.o: %.c
$(CC) $(CFLAGS) %< -o %@

knownfile.o : knownpath.c
$(CC) $(CFLAGS) knownpath.c

make文件是一个测试文件夹,里面包含了所有的测试代码(abs_test.c)。这也是所有对象应该去的地方。向上一个目录包含 c 文件 defn_abc.c 和 abc.c。

知道我做错了什么吗?


更新:这是我最新的 makefile,错误是“缺少分隔符”

CC=gcc
CFLAGS=-c -Wall -DUNIT_TESTING -DSYS_LINUX -Ipath1 -Ipath2
LDFLAGS = -Wl,---


SRCFILES := $(shell find ../ -name '*.c')
OBJFILES := $(patsubst %.c,%.o,$(SRCFILES))

all: $(PROG)

$(PROG): $(OBJFILES)
$(CC) $(CFLAGS) $(OBJFILES) -o $@ $(LDFLAGS)

all: $(OBJFILES)

%.o: %.c
$(CC) $(CFLAGS) %< -o %@

knownfile.o : knownpath.c
$(CC) $(CFLAGS) knownfile.c

最佳答案

这一行并不像你想象的那样:

OBJFILES: all

或者至少我是这么认为的,因为虽然它基本上是无害的,但它也毫无用处。它声明名为“OBJFILES”的目标 依赖于目标“all”。它也恰好是文件中的第一个目标,所以它是默认目标,但是因为“all”是它的先决条件,它会导致默认重建“all”目标。如果您完全省略该行,这正是会发生的情况。还要注意,这与变量 $(OBJFILES) 无关。

您的主要问题似乎是您对大部分变量引用使用了错误的语法。具有多字符名称的变量的值是通过 $(VAR)${VAR} 形式的表达式获得的,不是 %(var)。单字符名称可以省略圆括号/大括号。我建议您更喜欢带括号的形式而不是带花括号的形式,尤其是在食谱中的命令中,因为后者很容易与 shell 语法混淆。

关于创建一个更通用的 makefile,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50607332/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com