3、 编写5个.c文件和4个.h文件,其中文件1.c 1.h 2.c 2.h 存放在子目录12下,文件3.c 3.h 4.c 4.h 存放在子目录34下,5.c存放在主目录下4、 在该目录下编写Makefile文件并执行编译,生成可执行文件main。
时间: 2024-03-07 17:49:40 浏览: 58
下面是一个实现以上要求的示例:
目录结构:
```
.
├── 12
│ ├── 1.c
│ ├── 1.h
│ ├── 2.c
│ └── 2.h
├── 34
│ ├── 3.c
│ ├── 3.h
│ ├── 4.c
│ └── 4.h
├── 5.c
└── Makefile
```
1.c 的代码:
```c
#include "1.h"
#include <stdio.h>
void func1() {
printf("This is func1\n");
}
```
1.h 的代码:
```c
#ifndef 1_H
#define 1_H
void func1();
#endif
```
2.c 的代码:
```c
#include "1.h"
#include "2.h"
#include <stdio.h>
void func2() {
func1();
printf("This is func2\n");
}
```
2.h 的代码:
```c
#ifndef 2_H
#define 2_H
void func2();
#endif
```
3.c 的代码:
```c
#include "3.h"
#include <stdio.h>
void func3() {
printf("This is func3\n");
}
```
3.h 的代码:
```c
#ifndef 3_H
#define 3_H
void func3();
#endif
```
4.c 的代码:
```c
#include "3.h"
#include "4.h"
#include <stdio.h>
void func4() {
func3();
printf("This is func4\n");
}
```
4.h 的代码:
```c
#ifndef 4_H
#define 4_H
void func4();
#endif
```
5.c 的代码:
```c
#include "1.h"
#include "2.h"
#include "3.h"
#include "4.h"
int main() {
func1();
func2();
func3();
func4();
return 0;
}
```
Makefile 文件的代码:
```makefile
CC=gcc
CFLAGS=-I12 -I34
SRCDIR=12 34 .
SRCS=$(foreach dir,$(SRCDIR),$(wildcard $(dir)/*.c))
OBJS=$(patsubst %.c,%.o,$(SRCS))
.PHONY: clean
all: main
main: $(OBJS)
$(CC) $(CFLAGS) -o $@ $^
%.o: %.c
$(CC) $(CFLAGS) -c $< -o $@
clean:
rm -f $(OBJS) main
```
在终端中进入主目录,并执行以下命令:
```
make
```
这将编译所有的源代码文件,并生成可执行文件 main。执行以下命令运行程序:
```
./main
```
运行结果将输出以下内容:
```
This is func1
This is func2
This is func3
This is func4
```
阅读全文