编写make文件实现编译c或c++代码,使用shell编程
时间: 2024-02-13 20:00:38 浏览: 77
好的,以下是一个使用 shell 编程的 makefile 文件,用于编译 C 或 C++ 代码:
```
CC = gcc
CXX = g++
CFLAGS = -Wall -Wextra -pedantic
CXXFLAGS = $(CFLAGS)
SRCS = main.c
OBJS = $(SRCS:.c=.o)
EXEC = program
all: $(EXEC)
$(EXEC): $(OBJS)
$(CC) $(OBJS) -o $(EXEC)
%.o: %.c
$(CC) $(CFLAGS) -c $< -o $@
clean:
rm -f $(OBJS) $(EXEC)
.PHONY: all clean
define compile
@echo "Compiling $<..."
@$1 $2 -c $< -o $@
endef
%.o: %.cpp
$(call compile,$(CXX),$(CXXFLAGS))
%.o: %.c
$(call compile,$(CC),$(CFLAGS))
```
在这个 makefile 文件中,与之前的 makefile 文件相比,有以下几个区别:
- 使用 `.PHONY` 指令来声明 `all` 和 `clean` 是假目标,可以避免意外地生成文件名与这些假目标相同的文件。
- 定义了一个 shell 函数 `compile`,用于生成目标文件。这个函数接收两个参数,分别为编译器和编译选项。
- 定义了两个规则,分别用于编译 C++ 源文件和 C 源文件。这两个规则中,使用了 `call` 函数来调用 `compile` 函数,并传递对应的编译器和编译选项。
在命令行中,使用 `make` 命令可以编译生成可执行文件。如果需要清理编译生成的文件,可以使用 `make clean` 命令。
阅读全文