练习使用 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 17:50:09 浏览: 185
好的,我知道了你的问题。首先回答你的第一个问题:
编写简单的 C 程序,功能为在屏幕上输出“Hello gcc!”,然后使用 gcc 编译器的不同选项观察不同阶段所生成的文件。
以下是示例代码:
```c
#include <stdio.h>
int main() {
printf("Hello gcc!\n");
return 0;
}
```
使用 gcc 编译器的不同选项观察不同阶段所生成的文件:
- E 选项:只进行预处理,生成 *.i 文件。命令为:`gcc -E hello.c -o hello.i`
- S 选项:只进行编译,生成汇编代码 *.s 文件。命令为:`gcc -S hello.c -o hello.s`
- c 选项:只进行编译和汇编,生成目标文件 *.o 文件。命令为:`gcc -c hello.c -o hello.o`
- g 选项:生成可调试的可执行文件。命令为:`gcc -g hello.c -o hello`
执行以上命令后,可以观察到生成了不同的文件,如 *.i、*.s、*.o 和可执行文件 hello。
接下来回答你的第二个问题:
编写一个由头文件 greeting.h、自定义函数文件 greeting.c、主函数文件 myapp.c 构成的 C 程序,并根据这三个文件的依赖关系编写 Makefile 文件。
以下是示例代码:
greeting.h:
```c
#ifndef GREETING_H
#define GREETING_H
void say_hello();
#endif
```
greeting.c:
```c
#include <stdio.h>
#include "greeting.h"
void say_hello() {
printf("Hello, World!\n");
}
```
myapp.c:
```c
#include "greeting.h"
int main() {
say_hello();
return 0;
}
```
Makefile 文件:
```makefile
CC = gcc
CFLAGS = -Wall -g
OBJS = greeting.o myapp.o
TARGET = myapp
$(TARGET): $(OBJS)
$(CC) $(CFLAGS) -o $@ $^
%.o: %.c
$(CC) $(CFLAGS) -c $<
greeting.o: greeting.c greeting.h
myapp.o: myapp.c greeting.h
.PHONY: clean
clean:
rm -rf $(OBJS) $(TARGET)
```
在命令行中执行 `make` 命令即可编译并生成可执行文件 myapp。如果需要清除生成的文件,可以执行 `make clean` 命令。
阅读全文