c语言 - 如何在 Linux 上执行 make 命令时修复"make: 'all' is up to date error"?



我目前正在运行运行 OCR 的代码。我已经将其他 5 个程序与它链接在一起。 我必须说这不是我的代码,我从这里下载了它 https://github.com/PiotrKala/OCR?files=1

我用 mk 扩展名重命名了我的生成文件文件。我还用"all"和"main"之间的制表符替换了一个空格字符,这样做修复了一个"make:对"all"错误不做任何事情。

CC=gcc
PTHREAD=-lpthread
CCFLAGS=-w
all:    main

main:
$(CC) $(CCFLAGS) -o main main.c LibBMP.c  skeleton.c extractor.c $(PTHREAD)
clean:
rm main
test:
./main ../examples/sample.bmp
@echo 
cat output.txt
@echo
cat final.txt

我会说预期的结果是输出.txt打开。

目标名称可能与输出文件名冲突。

尝试在生成文件中添加以下内容:

.PHONY: all main

.PHONY告诉Make目标不与文件关联

如果您希望运行cat output.txt部分,则应调用test目标,如下所示:

make test

如果您只是执行make那么这将给出all目标,因为它在 makefile 中排在第一位。

对于"all"错误无需执行任何操作。

如果自上次构建程序以来未更改任何源文件,则这可能是正常的。您可能应该显示您正在使用的确切命令,以及命令的确切输出。

还应向某些规则添加先决条件。一旦程序构建完成,缺少先决条件意味着make将无法确定目标何时过时。例如,编辑main.c不会触发生成。也许像这样:

CC=gcc
PTHREAD=-lpthread
CCFLAGS=-w
all: main
main: main.c LibBMP.c skeleton.c extractor.c
$(CC) $(CCFLAGS) -o main main.c LibBMP.c  skeleton.c extractor.c $(PTHREAD)
clean:
rm main
test: main
./main ../examples/sample.bmp
@echo 
cat output.txt
@echo
cat final.txt

这看起来很不寻常。没有称为CCFLAGS的变量。

main:
$(CC) $(CCFLAGS) ...

通常,您的食谱如下所示:

CFLAGS = -g -w
CCFLAGS = -I. $(CFLAGS)
main:
$(CC) $(CPPFLAGS) $(CCFLAGS) ...

使用CFLAGSCCFLAGS可以做两件事。首先,它为CFLAGS提供了一个默认值。其次,它允许用户覆盖CFLAGS,同时通过CCFLAGS提供所需的选项。

另请参阅 GNU Make | 10.3 隐式规则使用的变量和 GNU 编码标准 | 7.2.3 用于指定命令的变量。

最新更新