Makefile无法创建最终可执行文件

时间:2019-03-01 16:12:25

标签: c makefile

我有这个Makefile

CFLAGS=-g
LDFLAGS=-g

exec: fluxo.o validar.o ficheiroParaMemoria.o

fluxo.o: fluxo.c

validar.o: validar.c validar.h

ficheiroParaMemoria.o: ficheiroParaMemoria.c ficheiroParaMemoria.h

clean:
    rm -f run *.o

它将创建3个.o文件,但未创建可执行文件。 Fluxo.c有主要的功能。 不可见项仅显示在每行的末尾,并且在clean命令之前显示Tabe

3 个答案:

答案 0 :(得分:1)

对不起,我不了解您的Makefile,但这是我项目中的Works Makefile:

CC = gcc
FLAGS = -std=c99
DEST_PATH = "./bin/main"


all: clean main.o Smtp.o Base64.o
    $(CC) build/*.o -o $(DEST_PATH) $(FLAGS)

main.o: src/main.cpp src/Service/Smtp.hpp
    $(CC) src/main.cpp -c -o build/main.o $(FLAGS)

Smtp.o: src/Service/Smtp.cpp src/Service/Smtp.hpp
    $(CC) src/Service/Smtp.cpp -c -o build/Smtp.o $(FLAGS)

Base64.o: src/Service/Base64.cpp src/Service/Base64.hpp
    $(CC) src/Service/Base64.cpp -c -o build/Base64.o $(FLAGS)

clean:
    rm -f build/*

-c标志创建对象文件(.o)。
在您的示例中,除了rm外,我没有看到任何实际的命令。
希望有帮助。

答案 1 :(得分:0)

解决了。需要将名称“ exec”更改为“ fluxo”,因为其中包含主要功能

答案 2 :(得分:0)

您的Makefile不包含任何构建可执行文件的规则。该规则是最接近的规则-它在这3个目标文件和一个名为“ exec”的目标之间创建依赖关系。

exec: fluxo.o validar.o ficheiroParaMemoria.o

如果要从这3个目标文件中构建“ exec”,则需要扩展规则以包括执行此操作的命令。

exec: fluxo.o validar.o ficheiroParaMemoria.o
    $(CC) -o $@ $^ $(CFLAGS) $(LDFLAGS)

在命令$@中用于指示目标,因此在这种情况下将是“ exec”。 $^是依赖项。

之所以不需要添加命令来构建.o文件,是因为make包含了一个内置规则,用于从同名的.c文件中构建.o文件。还有一个内置规则,可以从同名的.o或.c生成可执行文件,但是在这种情况下用处不大,因为它不包含其他2个.o文件

此外,LDFLAGS通常用于指定链接选项而不是编译选项,因此您不需要其中的“ -g”