0

我有一个带有一些示例的 SDK,但是当我想编译这些示例中的任何一个时,我会收到以下错误:

cc -g -I -o this_example.o -c this_example.c
cc: error: this_example.o: No such file or directory
make: *** [Makefile:15: this_example.o] Error 1

这是生成文件:

CC ?= gcc
INC_PATH ?= $(realpath ../inc)
LIB_PATH ?= $(realpath ../lib)
LIBS ?= $(wildcard $(LIB_PATH)/*.a) -pthread -lrt -lm
LDFLAGS :=-g -L$(LIB_PATH)
CFLAGS +=-g -I$(INC_PATH)

EXAMPLES=sdk_this_example_folder

.PHONY: all

all: $(EXAMPLES)

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

this_example: this_example.o  frozen.o
    $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^ $(LIBS) -Wl,-rpath,'$$ORIGIN/../../lib'

clean:
    rm -f *~ *.o $(EXAMPLES)

在 this_example_folder 中,我有四个文件:Makefile、this_example.c、frozen.c 和 freeze.h。哪里有问题?谢谢大家的帮助!

4

1 回答 1

0

realpath如果您要扩展的路径不存在,该函数将返回空字符串。

你有:

INC_PATH ?= $(realpath ../inc)

然后:

CFLAGS +=-g -I$(INC_PATH)

你的命令输出是:

cc -g -I -o this_example.o -c this_example.c

显然, 的值为INC_PATH空(因为-I命令行中的之后没有任何内容),这意味着该目录../inc不存在。

至于为什么会失败:该-I选项之后需要一个文件名。由于您没有,它使用-o(命令行中的下一个单词)作为文件名。这意味着它this_example.o被视为要编译的文件,而不是输出文件,当然它不存在。

于 2021-10-18T14:08:09.047 回答