linux下写一个makefile,编译文件夹下所有的.c .cc .cpp生成目标文件main,
时间: 2024-02-25 21:55:20 浏览: 139
第一章_LINUX编译与调试.ppt
好的,下面是一个简单的 Makefile 示例,可以编译指定目录下所有的 .c、.cc、.cpp 文件生成目标文件 main:
```
CC = gcc
CXX = g++
CFLAGS = -Wall
CXXFLAGS = -Wall
# 源文件目录
SRC_DIR = src
# 所有 .c、.cc、.cpp 文件
SRCS = $(wildcard $(SRC_DIR)/*.c) $(wildcard $(SRC_DIR)/*.cc) $(wildcard $(SRC_DIR)/*.cpp)
# 目标文件目录
OBJ_DIR = obj
# 所有目标文件
OBJS = $(addprefix $(OBJ_DIR)/, $(notdir $(SRCS:%.c=%.o) $(SRCS:%.cc=%.o) $(SRCS:%.cpp=%.o)))
# 目标文件名
TARGET = main
$(TARGET) : $(OBJS)
$(CXX) -o $@ $^
$(OBJ_DIR)/%.o : $(SRC_DIR)/%.c
$(CC) $(CFLAGS) -c -o $@ $<
$(OBJ_DIR)/%.o : $(SRC_DIR)/%.cc
$(CXX) $(CXXFLAGS) -c -o $@ $<
$(OBJ_DIR)/%.o : $(SRC_DIR)/%.cpp
$(CXX) $(CXXFLAGS) -c -o $@ $<
.PHONY : clean
clean :
rm -f $(OBJ_DIR)/*.o $(TARGET)
```
在该 Makefile 中,我们使用了以下变量:
- `CC`:C 语言编译器。
- `CXX`:C++ 编译器。
- `CFLAGS`:C 语言编译选项。
- `CXXFLAGS`:C++ 编译选项。
- `SRC_DIR`:源文件目录。
- `SRCS`:所有 .c、.cc、.cpp 文件。
- `OBJ_DIR`:目标文件目录。
- `OBJS`:所有目标文件。
- `TARGET`:目标文件名。
Makefile 中的规则如下:
- `$(TARGET)`:目标文件,依赖于所有目标文件,使用 C++ 编译器链接它们。
- `$(OBJ_DIR)/%.o`:目标文件的规则,依赖于对应的源文件,使用 C 或 C++ 编译器编译它们。
- `.PHONY : clean`:声明 clean 是一个伪目标。
- `clean`:删除所有目标文件和目标文件。
使用命令 `make` 即可编译生成目标文件。如果要清除目标文件,可以使用命令 `make clean`。
阅读全文