2. 练习使用 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 程序,并根据这三个文件的依赖关系编写 Makef ile 文件
时间: 2024-03-10 14:49:54 浏览: 650
好的,我明白了。对于第一个问题,以下是回答:
可以按照以下步骤练习使用 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 文件和可执行文件。
阅读全文