一步一步学写makefile (一)

转自:http://www.avrtool.com/avr/avrt/hjkf/200904/1542.html

makefile对于溺于IDE下的朋友们一定接触的不多,因为IDE把建立makefile的任务一手包办了,但常期以往沉浸于IDE的溺爱是对发展非常不利的,特别是在unix下和makefile打交道是更为普遍,所有学会写makefile是非常有必要的。

在IDE下,系统之所以能井然有序的对众多源代码进行编译和链接,是因为IDE很明确的告诉系统先做什么而后做什么。而makefile就是一个传播这些信息媒介,而我们现在的目标抛离IDE的怀怉,返璞归真。

这里是官方make参考文档中makefile一章,关于makefile的方方面面可谓是面面惧到,非常适合看到E文不头疼的朋友和即使头疼也要看的朋友http://www.gnu.org/software/make/manual/make.html#Makefiles 

准备工具和文件
hello.c

#include <stdio.h>
int main(int argc,char* argv[])
{
  printf("hello world\n");
  return 0;
}
当hello.c输入完成后,我们要对hello.c进行编译,需要执行
gcc hello.c

初任务:建立一个makefile,使用make代替以上的过程。

# 最简单的makefile
hello: hello.c
    gcc hello.c
#注意 hello前与gcc前的是[TAB]而不是空格
当makefile建立完成后放至hello.c所在的文件夹,执行make,看看发现了什么。
make执行了gcc hello.c成功的完成了编译
我们回首分析那个makefile发现执行单元由3个部分组成
<目标名称>:<需要的文件>
             <命令>
我们对makefile进行改写,以更能容易描述这三个单元
#次简单的makefile
hello: hello.o
    gcc hello.o -o hello
hello.o: hello.c
    gcc -c hello.c -o hello.o
删除目录下的hello.o后再执行make后发现了什么?
系统执行了
gcc -c hello.c -o hello.o
gcc hello.o -o hello

对比makefile我们很容易发现hello的建立过程为
hello <- hello.o <- hello.c


任务二:关联多个源文件的makefile

对单个文件大家可能没有体会到优势,那么我们新引入一个func.c 与 func.h 文件并修改hello.c
/*hello.c*/
#include "func.h"
int main(int argc,char* argv[])
{
    func();
    return 0;
}


/*func.c*/
#include "func.h"
void func(void)
{
printf("hello world\n");
}


/*func.h*/
#ifndef _FUNC_H
#define _FUNC_H

#include <stdio.h>

void func(void);
#endif
并修改相应的makefile为
#任务二的makefile
hello: hello.o func.o
    gcc hello.o func.o -o hello
hello.o: hello.c
    gcc -c hello.c -o hello.o
func.o: func.c func.h
    gcc -c func.c -o func.o
运行make后输出
gcc -c hello.c -o hello.o
gcc -c func.c -o func.o
gcc hello.o func.o -o hello
执行过程为
hello<-hello.o<-hello.c
    ^--func.o<-hello.c

通过任务一和任务二,我相信大家一对makefile最最基本的规则有了个明确的了解。不过这仅仅只是序幕。下一章我们将使用make的特性开始对makefile修改,以简化和自动化我们书写代码的过程。

makefile相比较c来讲还是相当的简单的

内容概要:本文深入探讨了多种高级格兰杰因果检验方法,包括非线性格兰杰因果检验、分位数格兰杰因果检验、混频格兰杰因果检验以及频域因果检验。每种方法都有其独特之处,适用于不同类型的时间序列数据。非线性格兰杰因果检验分为非参数方法、双变量和多元检验,能够在不假设数据分布的情况下处理复杂的关系。分位数格兰杰因果检验则关注不同分位数下的因果关系,尤其适合经济数据的研究。混频格兰杰因果检验解决了不同频率数据之间的因果关系分析问题,而频域因果检验则专注于不同频率成分下的因果关系。文中还提供了具体的Python和R代码示例,帮助读者理解和应用这些方法。 适合人群:从事时间序列分析、经济、金融等领域研究的专业人士,尤其是对非线性因果关系感兴趣的者和技术人员。 使用场景及目标:①研究复杂非线性时间序列数据中的因果关系;②分析不同分位数下的经济变量因果关系;③处理不同频率数据的因果关系;④识别特定频率成分下的因果关系。通过这些方法,研究人员可以获得更全面、细致的因果关系洞察。 阅读建议:由于涉及较多数公式和编程代码,建议读者具备定的统计和编程基础,特别是对时间序列分析有定了解。同时,建议结合具体案例进行实践操作,以便更好地掌握这些方法的实际应用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值