makefile当头文件不再当前文件夹中时的做法

如图,用makefile调试冒泡排序,我的主函数在bubblesort文件夹中,此文件夹中还有一个文件夹sort保存了头文件和源文件,然后就是编写makefile命令来make生成可执行文件。

内容:bubblesort.h

#ifndef _BUBBLESORT_H
#define _BUBBLESORT_H
/***************
冒泡排序的声明
输入:数组首地址, 元素个数
输出:有序的数组
返回值:void
****************/
void bubble_sort(int array[], int n);

#endif
bubble.c

#include <stdio.h>
#include "bubblesort.h"

void bubble_sort(int array[], int n)
{
	int i, j, t;    //定义循环变量,t为交换的临时变量
	int lastchange; //记录最后交换的位置
	i = n-1;
	while(i > 0)
	{
		lastchange = 0;
		for(j = 0; j < i; j++)   //有序时,时间复杂度变为O(n)
		{
			if(array[j+1] < array[j])
			{
				t = array[j];         //交换两个数的值
				array[j] = array[j+1];
				array[j+1] = t;
				lastchange = j;       //更新最后交换的位置
			}	
		}
		i = lastchange;	
	}	
}
下面是我写的makefile文件内容,有两个:

test:main.o ./sort/bubble.o
	gcc main.o ./sort/bubble.o -o test 
main.o:main.c  ./sort/bubble.c
	gcc -c main.c ./sort/bubble.c -o main.o -I ./sort
bubble.o:./sort/bubble.c
	gcc -c ./sort/bubble.c -o bubble.o -I ./sort
clean:
	rm -f *~ *.o

或是

test:main.o ./sort/bubble.o
	gcc main.o ./sort/bubble.o -o test 
main.o:main.c  ./sort/bubblesort.h
	gcc -c main.c  -o main.o -I ./sort
bubble.o:./sort/bubble.c
	gcc -c ./sort/bubble.c -o bubble.o -I ./sort
clean:
	rm -f *~ *.o

1、第一行test是目标文件,他依赖于main.o和bubble.o文件,所以在说明依赖的时候要说明文件路径

2、第二行编译命令,根据生成的*.o生成可执行文件

3、第三行是main.o的生成,依赖于main.c 和头文件,这里两种写法的不同就是一个写的源文件,一个写的头文件,之前一直出错,就是第四行后面,没有写明 -I ./sort,系统不知道去哪里找头文件,所以一直是bubblesort.h找不到。

4下面bubble.o的生成和main.o是一样的

5下面的clean动作是删除中间的临时文件

当存在子文件夹时,我们还可以在子文件夹中写一个makefile,执行可以这样改:

子文件夹中makefile:

bubble.o:bubble.c
	gcc -c bubble.c -o bubble.o -I ./sort
bubblesort文件夹中makefile:

test:main.o ./sort/bubble.o
	gcc main.o ./sort/bubble.o -o test 
main.o:main.c  ./sort/bubblesort.h
	gcc -c main.c  -o main.o -I ./sort
bubble.o:./sort/bubble.c
	cd ./sort && make
clean:
	rm -f *~ *.o

其中就是改掉了生成子文件夹中bubble.o的命令,改为了cd ./sort && make,就是先打开到sort文件夹然后执行make,这是允许的。

还有一种方法就是利用include关键字来包含子文件夹中的make文件。

sort文件夹中建立一个make文件a.mk

bubble.o:bubble.c
	gcc -c bubble.c -o bubble.o -I ./sort

bubblesort文件夹中的makefile文件:

#include "./sort/a.mk"
test:main.o ./sort/bubble.o
	gcc main.o ./sort/bubble.o -o test 
main.o:main.c  ./sort/bubblesort.h
	gcc -c main.c  -o main.o -I ./sort
clean:
	rm -f *~ *.o



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值