Chinaunix首页 | 论坛 | 博客
  • 博客访问: 293005
  • 博文数量: 77
  • 博客积分: 1422
  • 博客等级: 上尉
  • 技术积分: 932
  • 用 户 组: 普通用户
  • 注册时间: 2007-08-21 12:39
文章分类
文章存档

2011年(1)

2009年(3)

2008年(73)

我的朋友

分类:

2008-04-16 13:29:18

1.gcc几个选项说明:
  -o:要求输出的可执行程序的文件名
  -c:只要编译器输出目标代码,不必输出可执行文件
  -g:要求编译器在编译的时候提供我们以后对程序进行调试的信息
2.假设有这样一个程序:
可以这样编译:
gcc -c main.c
gcc -c mytool01.c
gcc -c mytool02.c
gcc -o main main.o mytool01.o mytool02.o

//main.c

#include "mytool01.h"
#include "mytool02.h"

int main(void)
{
    mytool01_print("tool 01\n");
    mytool02_print("tool 02\n");

    return 0;
}


//mytool01.h


#ifndef _MYTOOL_01_H
#define _MYTOOL_01_H
void mytool01_print(const char *print_str);
#endif

//mytool02.h


#ifndef _MYTOOL_02_H
#define _MYTOOL_02_H
void mytool02_print(const char *print_str);
#endif

//mytool01.c


#include "mytool01.h"

void mytool01_print(const char *print_str)
{
    printf("This is mytool01 print %s\n", print_str);
}

//mytool02.c


#include "mytool02.h"

void mytool02_print(const char *print_str)
{
    printf("This is mytool02 print %s\n", print_str);
}

3.如果项目庞大的话,上述编译方法会带来很大的工作量。我们可以使用make工具。

4.在执行make之前,要编写一个文件:Makefile,如上面的例子

#Makefile

main: main.o mytool01.o mytool02.o
  gcc -o main main.o mytool01.o mytool02.o
main.o: main.c mytool01.h mytool02.h
  gcc -c main.c
mytool01.o: mytool01.c mytool01.h
  gcc -c mytool01.c
mytool02.o: mytool02.c mytool02.h
  gcc -c mytool02.c

5.描述文件依赖关系规则格式如下:

target: components

TABrule

第一行表示依赖关系,第二行表示规则

6.Makefile有三个常用的变量:

$@:表示目标文件

$^:表示所有依赖文件

$<:表示第一个依赖文件

所以上面的例子简化为:

main: main.o mytool01.o mytool02.o

     gcc -o $@ $^

main.o: main.c mytool01.h mytool02.h

     gcc -c $@ $<

mytool01.o: mytool01.c mytool01.h

    gcc -c $<

mytool02.o: mytool02.c mytool02.h

    gcc -c $<

7.Makefile的一个缺省规则:

..c.o:

gcc -c $<

这个规则表示所有的.o文件都是依赖对应的.c文件,所以上例继续简化:

main: main.o mytool01.o mytool02.o

    gcc -o $@ $^

..c.o:

    gcc -c $<

 

 

阅读(655) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~