我目前正在运行运行 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) ...
使用CFLAGS
和CCFLAGS
可以做两件事。首先,它为CFLAGS
提供了一个默认值。其次,它允许用户覆盖CFLAGS
,同时通过CCFLAGS
提供所需的选项。
另请参阅 GNU Make | 10.3 隐式规则使用的变量和 GNU 编码标准 | 7.2.3 用于指定命令的变量。