SOURCES中要写入我所有的.c和.cpp文件吗
时间: 2023-12-24 12:04:28 浏览: 33
是的,SOURCES变量需要包含所有需要编译的.c和.cpp文件的文件名。在makefile,我们需要明确列出需要编译的源文件,否则make工具将无法找到它们并编译它们。
如果你的源文件非常多,可以使用通配符来代替手动列出每个文件名。例如,如果你的所有源文件都在src目录下,可以使用以下代码:
```
SOURCES=$(wildcard src/*.c src/*.cpp)
```
这个代码会自动查找src目录下所有的.c和.cpp文件,并将它们的文件名保存到SOURCES变量中。这种方法可以简化makefile的编写,但需要注意的是,如果你的源文件不在同一个目录下,或者需要排除某些文件,就需要手动列出每个文件名。
相关问题
makefile如何同时能够编译.c和.cpp文件
可以使用以下的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`命令。