【发布时间】:2016-10-01 04:08:41
【问题描述】:
在一个程序中,我有一个 list.c 文件、list.h 文件和 run.c 文件。在 run.c 文件中,代码包含我的主程序以及“#include list.h”。在我的 list.h 文件中,我的函数是无效的并且正在被定义。最后,在我的 list.c 文件中,我再次包含 list.h,并且我了解了每个函数将要执行的操作的含义和代码。我制作了一个看起来像这样的makefile:
SOURCES = run.c list.c
OBJECTS= run.o list.o
HEADERS = list.h
CC = gcc
CFLAGS = -g -Wall
lab1: $(OBJECTS)
(tab) $(CC) $(CFLAGS) $(OBJECTS) -o lab1
clean:
(tab) rm -fR *o lab1
我的任何代码都没有错,因为它已经完成,我只是在复制代码。但是,我不确定如何使用 makefile 来运行这些多个文件。我只在使用 gcc 编译并使用“./”之后才熟悉运行器文件。我的 makefile 是否有问题,或者是否有以不同方式编译这些文件的步骤?
感谢您的帮助
【问题讨论】:
-
您需要一个
$(OBJECTS)的目标,它将利用SOURCES。通常,您的lab1目标是最终的可执行文件,并且应该有用于链接的命令,即$(CC) $(LDFLAGS) $(OBJECTS)...。您需要一个目标和相应的命令来描述如何构建这些对象,即$(CC) $(CFLAGS) $(SOURCES) ...。这可能会有所帮助:mrbook.org/blog/tutorials/make -
@yano 阅读链接后,我按照它所说的方式编译它,它给了我makefile中的所有文件。我假设它编译?我将如何运行这些多个文件来测试它?
-
编译命令末尾的
- lab1似乎不正确。你是说-o lab1吗? -
我会将 clean 命令更改为
rm -f *.o lab1。您拥有的命令有点危险。它将递归删除任何以o结尾的目录。 -
其他cmets和答案都说了。如果所有东西都编译好了,你应该有一个
lab1可执行文件。执行ls -l,您应该会看到lab1的x可执行标志,然后只需./lab1即可运行它。如果那不存在,那就错了。运行make -d将输出有关make正在做什么的更详细信息,如果出现问题,可能会提供线索。