运用Makefile在不同路径下编译.c和.h文件
时间: 2024-02-03 13:15:12 浏览: 267
makefile编译多个文件
可以使用Makefile来编译不同路径下的.c和.h文件。下面是一个示例Makefile:
```
CC=gcc
CFLAGS=-I./include
SRC=./src
OBJ=./obj
BIN=./bin
$(BIN)/myprogram: $(OBJ)/main.o $(OBJ)/helper.o
$(CC) -o $@ $^
$(OBJ)/main.o: $(SRC)/main.c $(SRC)/helper.h
$(CC) $(CFLAGS) -c $< -o $@
$(OBJ)/helper.o: $(SRC)/helper.c $(SRC)/helper.h
$(CC) $(CFLAGS) -c $< -o $@
.PHONY: clean
clean:
rm -f $(OBJ)/*.o $(BIN)/myprogram
```
在这个Makefile中,我们假设我们有一个名为myprogram的程序,它的源代码位于./src目录中,头文件位于./include目录中,目标文件应该被编译到./obj目录中,最终的可执行文件应该被放置在./bin目录下。
我们定义了一些变量,以便在后面的规则中使用。CC变量指定使用的编译器,CFLAGS变量指定编译选项,SRC变量指定源代码目录,OBJ变量指定目标文件目录,BIN变量指定可执行文件目录。
在这个Makefile中,我们定义了三个规则:myprogram、main.o、helper.o。myprogram规则指定了可执行文件应该由哪些目标文件组成。main.o和helper.o规则分别指定了如何编译源文件和头文件,以及如何生成目标文件。
最后我们还定义了一个clean规则,用于删除生成的目标文件和可执行文件。
使用make命令来编译和链接程序:
```
$ make
```
这将会自动编译所有的.c和.h文件,并将生成的目标文件和可执行文件存储到相应的目录中。
```
$ make clean
```
这将会删除所有生成的目标文件和可执行文件。
阅读全文