makefile如何同时能够编译.c和.cpp文件
时间: 2024-02-18 19:03:03 浏览: 262
可以使用以下的makefile代码来同时编译.c和.cpp文件:
```
CC=g++
CFLAGS=-c -Wall
LFLAGS=-Wall
SOURCES=main.c mycppfile.cpp
OBJECTS=$(SOURCES:.cpp=.o)
EXECUTABLE=myprogram
all: $(SOURCES) $(EXECUTABLE)
$(EXECUTABLE): $(OBJECTS)
$(CC) $(LFLAGS) $(OBJECTS) -o $@
.cpp.o:
$(CC) $(CFLAGS) $< -o $@
.c.o:
$(CC) $(CFLAGS) $< -o $@
clean:
rm -rf *o $(EXECUTABLE)
```
上面的makefile中,SOURCES变量包含了所有需要编译的.c和.cpp文件。OBJECTS变量将所有cpp文件的后缀替换为.o后得到的文件名称。all规则会调用$(EXECUTABLE)规则,$(EXECUTABLE)规则会依赖$(OBJECTS)规则,$(OBJECTS)规则会编译所有的.c和.cpp文件。最后,makefile还提供了一个clean规则,可以用来清除所有的.o文件和可执行文件。
相关问题
编写可以编译和运行0521.cpp, 0523.cpp 和0525. cpp这3个cpp文件的makefile
以下是可以编译和运行0521.cpp、0523.cpp和0525.cpp这三个cpp文件的makefile:
```
# Makefile for 0521.cpp, 0523.cpp, and 0525.cpp
CC=g++
CFLAGS=-c -Wall
LDFLAGS=
SOURCES=0521.cpp 0523.cpp 0525.cpp
OBJECTS=$(SOURCES:.cpp=.o)
EXECUTABLE=program
all: $(SOURCES) $(EXECUTABLE)
$(EXECUTABLE): $(OBJECTS)
$(CC) $(LDFLAGS) $(OBJECTS) -o $@
.cpp.o:
$(CC) $(CFLAGS) $< -o $@
clean:
rm -rf $(OBJECTS) $(EXECUTABLE)
```
在终端中,使用`make`命令即可编译并生成可执行文件`program`。如果需要清除编译生成的中间文件和可执行文件,可以使用`make clean`命令。
linux下写一个makefile,编译文件夹下所有的.c .cc .cpp生成目标文件main,
好的,下面是一个简单的 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`。
阅读全文