关于gcc和Makefile的使用总结

gcc编译的过程

1.预处理,preprocess  把头文件和库文件展开,宏定义直接替换.
$	gcc -E main.c -o main.i  
2.汇编,compile  , 生成一个汇编代码文件
 $	gcc -S main.i -o main.s  
3.编译,assemble
 $	gcc -c main.s -o main.o  
4.链接,link
  $	gcc  main.o -o main

gcc编译常用命令

$ gcc mian.c -o mian 

Makefile的使用

新建一个文本文档命名为Makefile

$ vim Makefile

为了便于演示和说明,已经新建了main.c add.c add.h 三个c语言文件

$ cat main.c
#include <stdio.h>
#include "add.h"

int main()
{
	int a = 1 ;
	int b = 2 ;
	int sum ;
	sum = addInt( a , b );
   	printf(" %d + %d = %d " , a , b ,sum );
	return 0;
}	

$ cat add.c
	#include "add.h"

	int addInt( int a , int b )
	{
		return a + b ;
	}
$  c_pro cat add.h 
	#ifndef __ADD_H
	#define __ADD_H

	int addInt( int a , int b );

	#endif

显示规则:

1. # 是注释
2. 目标文件  : 依赖文件
 [TAB]     命令
3. 第一个目标文件是最终目标
4. 伪目标:
	 :PHONY :
      clear :
     	  rm -rf main.i main.o main 
# this is a simple code about processing 1 + 2 and printing result .

main : main.o add.o
	 gcc main.o  add.o  -o main

main.o : main.s
	gcc -c main.s -o main.o

main.s : main.i
	gcc -S main.i -o main.s

main.i : main.c
	gcc -E main.c -o main.i

add : add.o
	gcc add.o -o add

add.o : add.s
	gcc -c add.s -o add.o

add.s : add.i
	gcc -S add.i -o add.s

add.i : add.c
	gcc -E add.c -o add.i

.PHONY:
clear :
	rm -rf add.i add.s add.o add.i add.s add.o

变量:

1.  = :替换
2. += : 追加
3. := : 常量
4. 使用时用$(var)
$ cat Makefile
# this is a simple code about processing 1 + 2 and printing result .
# In order to compare with makefile above, only minor changes have been made here
G := gcc
TAR = main
OBJ= main.c
OBJ += add.c

$(TAR) : $(OBJ)
	 $(G) $(OBJ) -o $(TAR)

# main.o : main.s
# 	gcc -c main.s -o main.o
# 
# main.s : main.i
# 	gcc -S main.i -o main.s
# 
# main.i : main.c
# 	gcc -E main.c -o main.i
# 
# add : add.o add.o
# 	gcc add.o -o add
# 
# add.o : add.s
# 	gcc -c add.s -o add.o
# 
# add.s : add.i
# 	gcc -S add.i -o add.s
# 
# add.i : add.c
# 	gcc -E add.c -o add.i
# 

.PHONY:
clear :
	rm -rf add.i add.s add.o add.i add.s add.o

隐含规则:

1. %.c :  任意的c文件
2. *.c :   所有的c文件
# this is a simple code about processing 1 + 2 and printing result .
# In order to compare with makefile above, only minor changes have been made here
G := gcc
TAR = main


$(TAR) : *.c 
	 $(G) *.c -o $(TAR)

# main.o : main.s
# 	gcc -c main.s -o main.o
# 
# main.s : main.i
# 	gcc -S main.i -o main.s
# 
# main.i : main.c
# 	gcc -E main.c -o main.i
# 
# add : add.o add.o
# 	gcc add.o -o add
# 
# add.o : add.s
# 	gcc -c add.s -o add.o
# 
# add.s : add.i
# 	gcc -S add.i -o add.s
# 
# add.i : add.c
# 	gcc -E add.c -o add.i
# 
.PHONY:
clear :
	rm -rf main.i main.s main.o add.i add.s add.o main 

通配符:

1. $^ :所有的依赖文件
2. $@: 所有的目标文件
# this is a simple code about processing 1 + 2 and printing result .
# In order to compare with makefile above, only minor changes have been made here
G := gcc
TAR = main
$(TAR): *.c 
	 $(G) $^ -o $@

# main.o : main.s
# 	gcc -c main.s -o main.o
# 
# main.s : main.i
# 	gcc -S main.i -o main.s
# 
# main.i : main.c
# 	gcc -E main.c -o main.i
# 
# add : add.o add.o
# 	gcc add.o -o add
# 
# add.o : add.s
# 	gcc -c add.s -o add.o
# 
# add.s : add.i
# 	gcc -S add.i -o add.s
# 
# add.i : add.c
# 	gcc -E add.c -o add.i
# 
.PHONY:
clear :
	rm -rf main.i main.s main.o add.i add.s add.o main 

Makefile 的使用

$ make
# 进行编译
$ make  clear 
# 执行删除命令
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 使用gccmakefile编写c程序,可以通过以下步骤完成: 1. 编写c程序,例如hello.c。 2. 编写makefile文件,指定编译器和编译选项,以及目标文件和依赖关系。例如: ``` CC=gcc CFLAGS=-Wall -g TARGET=hello DEPS= $(TARGET): $(TARGET).o $(DEPS) $(CC) $(CFLAGS) -o $@ $^ %.o: %.c $(CC) $(CFLAGS) -c -o $@ $< ``` 3. 在命令行中输入make命令,即可自动编译生成可执行文件。例如: ``` $ make ``` 4. 运行可执行文件。例如: ``` $ ./hello ``` 以上就是使用gccmakefile编写c程序的基本步骤。 ### 回答2: GCC是一种广泛使用的C编译器,对于编写C程序非常有帮助。而Makefile是一种构建工具,可以自动化编译程序。下面将逐步介绍如何使用GCCMakefile编写C程序。 一、安装GCC使用GCC之前,你需要在系统中安装GCC。具体安装方法可以查找相关文档或者手册。安装完成后,可以在终端输入“gcc -v”命令来查看GCC是否安装成功。 二、创建Hello World程序 首先,需要创建一个Hello World程序。在终端中使用文本编辑器来创建一个C源文件。输入以下代码: #include <stdio.h> int main(){ printf("Hello, World!\n"); return 0; } 将文件保存为hello.c。 三、编译程序 接下来需要用GCC来编译程序。运行以下命令来编译hello.c: gcc -o hello hello.c 此命令将生成一个可执行文件hello。现在就可以运行这个文件,程序会输出“Hello, World!”。 四、使用Makefile 另一种编译程序的方法是使用Makefile来编译程序。在程序根目录中创建一个名为Makefile的文件。在这个文件中,你需要定义目标文件、依赖关系和编译方式。可以将上文的hello.c程序改写成Makefile的形式: CC=gcc CFLAGS=-Wall hello: hello.o $(CC) $(CFLAGS) -o hello hello.o hello.o: hello.c $(CC) $(CFLAGS) -c hello.c .PHONY: clean clean: rm -f hello *.o 在这个Makefile中,使用了变量CC和CFLAGS来指定编译器和编译选项。然后定义了两个目标文件:hello和hello.o。第一个目标文件“hello”依赖于hello.o,指定了如何编译生成可执行文件。第二个目标文件“hello.o”依赖于hello.c,指定了如何编译生成.o文件。同时还定义了一个用于清理中间文件的环节。 现在你可以运行以下命令: make 这个命令会自动读取当前目录中的Makefile文件,并编译程序。若要清除目录中生成的中间文件,可以执行以下命令: make clean 总结 以上就是使用GCCMakefile编写C程序的基本方法。当然还有其他的编译方式,如使用IDE等,但是学习使用GCCMakefile可以让你更深入地理解编译程序的过程。希望以上方法能够帮助到大家。 ### 回答3: C语言是一门广泛应用的编程语言,它的应用范围涉及到操作系统、网络、数据库、多媒体等众多领域。为了方便编译、运行和维护C程序,我们常常使用gccmakefile来进行编译和构建。 gcc(GNU Compiler Collection)是一款免费开源的编译器,它支持C、C++、Objective-C、Fortran和Ada等多种编程语言。gcc的优点是它有丰富的功能和灵活的配置选项,能够生成高效的机器码,还支持调试信息的生成和优化等功能。它是编译Linux等开源系统中C程序的标准编译器,也是许多跨平台应用的首选编译器。 makefile是一种文本文件,用来指定如何构建一个工程,它包含编译规则、目标文件、依赖关系和编译选项等信息。makefile中的关键字包括target、dependencies、commands、macros和variables等,通过这些关键字可以指定程序的编译方式和运行方式。makefile的优点是它能够自动化编译和构建,减少了手动编译的繁琐和错误。 下面我们以一个简单的C程序为例,来演示如何使用gccmakefile进行编译和构建。 首先,我们创建一个名为hello.c的C程序文件,内容如下: #include<stdio.h> int main(){ printf("Hello, world!\n"); return 0; } 然后,我们使用gcc命令进行编译,生成可执行文件,命令如下: gcc -o hello hello.c 其中,“-o”选项用来指定输出文件的名称,“hello.c”为源程序文件名,“hello”为生成的可执行文件名。 接着,我们可以使用makefile来管理代码的构建过程。我们新建一个名为Makefile的文件,内容如下: CC=gcc CFLAGS= LDFLAGS= .PHONY: all all: hello hello: hello.o $(CC) $(LDFLAGS) $^ -o $@ hello.o: hello.c $(CC) $(CFLAGS) -c $< -o $@ 其中,“CC”是编译器名称,“CFLAGS”是编译选项,“LDFLAGS”是链接选项,“.PHONY”是一个伪目标,“all”是一个目标,表示要构建的程序名称,“hello”是目标文件,“hello.o”是依赖文件,“$(CC)”和“$<”等是变量和自动变量,用来代替具体的值。 最后,我们可以使用“make”命令来进行构建。命令如下: make all 运行以上命令后,程序即可成功编译和构建。我们可以使用“./hello”命令来运行程序,输出“Hello, world!”的内容。 以上是使用gccmakefile编写C程序的基本流程和示例。希望能对C语言的学习和实践有所帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值