在Linux上执行make命令时,如何解决“ make:'all'为最新错误”?

时间:2019-04-18 06:14:38

标签: c linux makefile ocr

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

下载了它

我用mk扩展名重命名了我的makefile文件。我还用'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

我想说的是打开output.txt的预期结果。

3 个答案:

答案 0 :(得分:1)

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

make test

如果您只是执行make,那么它将给all目标,因为它首先出现在makefile中。

答案 1 :(得分:0)

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

尝试将其添加到Makefile中

.PHONY: all main

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

答案 2 :(得分:0)

  

对于“全部”错误,无需采取任何措施。

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

您还应该在一些规则中添加前提条件。程序一旦构建,就缺乏先决条件,这意味着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 Variables Used by Implicit RulesGNU Coding Standards | 7.2.3 Variables for Specifying Commands