Linux Ubuntu操作系统下运行C语言Makefile文件编写.

本文介绍了如何在Linux环境下编写C程序,包括创建头文件、函数文件和主函数文件,并通过gcc编译器进行编译。重点讨论了Makefile文件的编写,详细展示了如何根据文件依赖关系构建编译规则,以实现自动化编译。通过运行make命令,成功生成并执行了C程序,输出了预期结果。
摘要由CSDN通过智能技术生成

Linux下C程序的编写
练习使用gcc 编译器编译C 程序并执行,编写Makefile文件,使用make 工具编译程序并执行
具体要求:
(1)编写简单的C 程序,功能为在屏幕上输出“Hello gcc!”。利用该程序练习使用gcc 编译器的E、S、c、o、g 选项,观察不同阶段所生成的文件,即*.c、.i、.s、*.o 文件和可执行文件。
(2)编写一个由头文件greeting.h、自定义函数文件greeting.c、主函数文件myapp.c 构成的C 程序,并根据这三个文件的依赖关系编写Makefile 文件
请上传源代码以及程序运行的结果截图。

如果你是来抄作业的上面部分跳过
操作系统的作业为啥要写这个啊. (老师还不讲QAQ
既然老师不讲,那么我们只能自力更生了. 第一小问很简单, 不做讲解. 重点在第二问的Makefile文件的书写.

应题目要求先编写头文件greeting.h 和 自定义函数文件greeting.c.
我们需要知道的硬性知识是如何编写C语言头文件. (先给代码,想学的在后面补充.
greeting.h:

#ifndef _GREETING_H
#define _GREETING_H

#include<stdio.h>

extern void fun1(void);
extern void fun2(void);

#endif

greeting.c:

#include "greeting.h"

void fun1(void){ printf("your name, please!\n"); }
void fun2(void){ printf("gcc~\n"); }

上面是编写了我们自己的头文件,该头文件中包含我们定义的两个函数,可以直接使用.之后我们需要编写一个C语言程序来运行使用它.即myapp.c文件.
myapp.c

#include "greeting.h"
int main(void){
	fun1();
	fun2();
	return 0;
}

现在我们的C语言程序已经写好了,有以上代码,你在C语言编辑器中是可以运行的. 如果不进行C语言编辑器的运行,我们应该如何得到结果? 这就是需要我们的Makefile文件了. 先直接给出代码.

myapp: greeting.o myapp.o
	gcc myapp.o greeting.o -o myapp
greeting.o: greeting.c greeting.h
	gcc -c greeting.c
myapp.o: myapp.c greeting.h
	gcc -c myapp.c
clean:
	rm rf *.o

在终端中执行make语句,得到的myapp文件,再运行得到结果为:

your name, please!
gcc~

为了写作业的同学看到这里就行了


下面先讲解一下C语言头文件的书写.
*.h 文件具有固定的模板,你唯一要做的就是取个名字.

#ifndef _GREETING_H // *.h的文件名,文件名前加_ ,并且点换成_
#define _GREETING_H // 书写方法同上

auto function() {};

#endif

*.c文件的书写. 应为这两个文件是一个整体,设置相同的名字更好一些.
当然你在 *.c文件中书写的函数名是要能对应 *.h文件中的. 例如:

#include "greeting.h" //你首先要和 *.h文件链接
//书写对应的函数
auto function() {};
//当然你书写的函数如果用到printf等需要引用对应的头文件.
//你可以写在*.c文件中,也可以写在*.h文件中.

之后通过 #include" .h " 直接引用即可.
这里是应题目要求. 你也可以将 ‘
.c’ 文件中的函数直接写在 ‘*.h’ 中,在Linux ubuntu相同的目录下,可以直接引用并编译。

gcc myapp.c

关于Makefile部分:(只涉及书写运行C语言的makefile书写
书写的Makefikle实际上就是做了我们下载的编辑器做的事情. 在一个C语言程序的运行时,需要生成一系列的 *.o文件.
首先将我们的C语言程序进行gcc编译. 假设文件名为myapp.c

myapp.o: myapp.c
	gcc -c myapp.c

第一行表示我们要生成 myapp.o 文件,并且我们需要用到的时 myapp.c 文件.
第二行表示我们要执行的操作是对 myapp.c 文件的 gcc 环境下的编译.
有了 *.o 的文件我们才可以生成能得到运行结果的文件. 这个文件你可以任意取名.

name: myapp.o
	gcc myapp.o -o name

将以上代码合并,就是执行名为 myapp.c 的C语言程序后的执行文件name.

name: myapp.o
	gcc myapp.o -o name
myapp.o: myapp.c
	gcc -c myapp.c
clean:
	rm rf *.o

ps:因为是自学的,可能会有些专业术语用错.

--over

好的,我明白了。对于第一个问题,以下是回答: 可以按照以下步骤练习使用 gcc 编译器编译 C 程序执行,并编写 Makefile 文件使用 make 工具编译程序执行。 1. 编写简单的 C 程序,例如在一个名为 hello.c 的文件编写以下代码: ```c #include <stdio.h> int main() { printf("Hello gcc!\n"); return 0; } ``` 2. 使用 gcc 编译器的 -E 选项生成预处理后的代码,可以在终端中输入以下命令: ``` gcc -E hello.c -o hello.i ``` 这将生成一个名为 hello.i 的文件,其中包含了 hello.c 的预处理后的代码。 3. 使用 gcc 编译器的 -S 选项将预处理后的代码编译成汇编代码,可以在终端中输入以下命令: ``` gcc -S hello.i -o hello.s ``` 这将生成一个名为 hello.s 的文件,其中包含了 hello.i 的汇编代码。 4. 使用 gcc 编译器的 -c 选项将汇编代码编译成目标文件,可以在终端中输入以下命令: ``` gcc -c hello.s -o hello.o ``` 这将生成一个名为 hello.o 的文件,其中包含了 hello.s 的目标代码。 5. 使用 gcc 编译器的 -o 选项将目标文件链接成可执行文件,可以在终端中输入以下命令: ``` gcc hello.o -o hello ``` 这将生成一个名为 hello 的可执行文件,可以通过以下命令运行: ``` ./hello ``` 6. 编写 Makefile 文件,可以在终端中输入以下命令: ``` touch Makefile ``` 打开 Makefile 文件,并输入以下内容: ```Makefile all: myapp myapp: myapp.o greeting.o gcc myapp.o greeting.o -o myapp myapp.o: myapp.c greeting.h gcc -c myapp.c -o myapp.o greeting.o: greeting.c greeting.h gcc -c greeting.c -o greeting.o clean: rm -f myapp.o greeting.o myapp ``` 7. 编写文件 greeting.h,例如在一个名为 greeting.h 的文件编写以下代码: ```c #ifndef GREETING_H #define GREETING_H void greeting(); #endif ``` 8. 编写自定义函数文件 greeting.c,例如在一个名为 greeting.c 的文件编写以下代码: ```c #include <stdio.h> #include "greeting.h" void greeting() { printf("Hello, this is a greeting from the greeting.c file!\n"); } ``` 9. 编写主函数文件 myapp.c,例如在一个名为 myapp.c 的文件编写以下代码: ```c #include "greeting.h" int main() { greeting(); return 0; } ``` 10. 使用 make 工具编译程序执行,可以在终端中输入以下命令: ``` make ./myapp ``` 这将生成一个名为 myapp 的可执行文件,并输出以下内容: ``` Hello, this is a greeting from the greeting.c file! ``` 如果要清除生成的文件,可以在终端中输入以下命令: ``` make clean ``` 这样可以删除所有的 .o 文件和可执行文件
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值