在程序中,我有一个list.c文件,list.h文件和run.c文件。在run.c文件中,代码包含我的主程序以及#34; #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有什么问题,或者是否有以不同方式编译这些文件的步骤?
感谢您的帮助
答案 0 :(得分:5)
给定的makefile正在运行并生成可执行的public static void bubbleSort(int[] A, String TipoOrdenamiento) {
boolean increasingOrder = TipoOrdenamiento == "Min";
for (int i = 1; i < A.length; i++) {
for (int j = A.length - 1; j >= i; j--) {
if (A[j - 1] < A[j] != increasingOrder && A[j - 1] != A[j]) {
int aux = A[j - 1];
A[j - 1] = A[j];
A[j] = aux;
}
}
}
}
文件。但是,lab1
文件依赖于.o
文件,并且不会捕获此依赖项。
您应指定构建.o文件的目标,如下所示:
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
%.o: %.c $(HEADERS)
$(CC) -c $(CFLAGS) $< -o $@
clean:
rm -fR *o lab1
列表增长,则任何标头的更改将保证重建所有 HEADERS
个文件。
例如,假设我们还.o
使用buf.c
。现在buf.h
。如果我们更改HEADERS = list.h buf.h
,我们的makefile会重建buf.h
和list.o
,即使buf.o
重建就足够了。
为了解决这个问题,我们可以使用更详细的makefile,它使用以下规则标识每个buf.o
文件的特定标头先决条件:
.o
答案 1 :(得分:1)
解决方案1:只需将每个.c文件单独列为输入并编译一次
gcc list.c run.c -o lab1
解决方案2:单独编译每个.c文件
gcc -c list.c
gcc -c run.c
gcc -o lab1 list.o run.o
您的项目很小且非常简单,以至于完全通用的makefile过度使用:
SOURCES = run.c list.c
CC = gcc
CFLAGS = -g -Wall
all:
$(CC) $(CFLAGS) $(SOURCES) -o lab1
clean:
rm -fR *o lab1
all:
是一个默认目标,只需在没有参数的情况下键入make
即可执行。
答案 2 :(得分:0)
编译完成后,它最终制作了一个我可以运行的lab1文件,一切正常。我的makefile最终工作正常,我完全忘记了它正在创建一个名为lab1的文件。我确实将我的makefile更改为上面的选项,这也有效。谢谢