带有两个.cpp文件和一个标头文件的基本makefile
Basic Makefile with two .cpp files and a header file
我想学习如何为包含3个文件的程序创建一个基本的makefile:A.CPP,B.CPP和B.H.我将B.H包括在A.CPP中,并调用在B.CPP中在此处声明并定义的函数。我经过了几个Makefile教程,并提出了这样的Makefile:
CC=g++
CFLAGS= -std=c++11 -Wall -pedantic -g
SOURCES= a.cpp b.cpp
DEPS= b.h
OBJECTS=$(SOURCES:.cpp=.o)
EXECUTABLE=exec
all: $(EXECUTABLE)
@echo Make has finished.
$(EXECUTABLE): $(OBJECTS)
$(CC) $(CFLAGS) $(OBJECTS) -o $(EXECUTABLE)
%.o: %.cpp $(DEPS)
$(CC) $(CFLAGS) -c -o $@ $<
clean:
$(RM) *.o *~ $(EXECUTABLE)
但是,当我制作和运行执行时,它无法按预期工作。编译器没有任何警告或错误,但是A.CPP中的功能调用被跳过,好像不存在。相反,如果我运行简单
g++ -std=c++11 -Wall -pedantic -g a.cpp b.cpp -o exec
我的程序按预期运行。显然,我在makefile中做的事情不是正确的,但我无法弄清楚什么。
CC=g++
CFLAGS= -std=c++11 -Wall -pedantic -g
SOURCES= a.cpp b.cpp
DEPS= b.h
OBJECTS=$(SOURCES:.cpp=.o)
EXECUTABLE=exec
all: $(EXECUTABLE)
@echo Make has finished.
$(EXECUTABLE): $(OBJECTS)
$(CC) $(OBJECTS) -o $@
.cpp.o:
$(CC) $(CFLAGS) -c $*.cpp
clean:
$(RM) *.o *~ $(EXECUTABLE)
在阅读makefile示例时,像计算机一样阅读它很有用,可以在您浏览文件时替换字段。弹出的线是:
SOURCES= a.cpp b.cpp
...
OBJECTS=$(SOURCES:.cpp=.o)
...
$(EXECUTABLE): $(OBJECTS)
$(CC) $(CFLAGS) $(OBJECTS) -o $(EXECUTABLE)
...
%.o: %.cpp $(DEPS)
$(CC) $(CFLAGS) -c -o $@ $<
第一行定义了源文件。第二个定义了可以从.cpp文件构建makefile所说的对象文件(Extension .o)。第三和第四定义了生成最终可执行文件的规则,该规则要求成功生成两个对象文件a.o
和b.o
。最后两行定义了生成对象文件的规则,该规则指定了它们需要相同名称的.cpp文件和$(DEPS) == b.h
文件。
最后,此makefile调用以下行:
g++ -std=c++11 -Wall -pedantic -g -c -o a.o a.cpp b.h
g++ -std=c++11 -Wall -pedantic -g -c -o b.o b.cpp b.h
g++ -std=c++11 -Wall -pedantic -g a.o b.o -o exec
因此,看来您的代码中的断裂位于前两次传递给编译器的混合标志中。
相关文章:
- 使用 Makefile 中的头文件编译 Pybind (不使用 cmake)
- Arduino-Makefile:编译器无法编译用户库 cpp 文件
- C++ 如何将两个 makefile 对象目标规则(位于另一个文件夹中)合并到一个目标/规则中?
- 如何在makefile中包含tensorflow c ++".so"文件?
- 有没有办法从Makefile访问VS Code c_cpp_properties.json文件中的定义
- 在Windows上运行Linux Makefile(.so文件)
- 为简单的src,include,libs文件夹项目编写Makefile
- 如何从 Makefile 中的其他目录导入所有源代码和头文件
- 使用 g++ 和 Makefile 编译 c++ 时可执行文件非常大
- Makefile在Linux中工作,但在Windows下不起作用,在子目录中找不到文件
- makefile和错误将与大型项目分开的文件编译
- 当自动编译对象文件时,如何使我的makefile使用我的cflags标志
- makefile 没有将 .o 和可执行文件放在各自的 obj 和 bin 目录中
- 如何仅重新编译makefile中更改的内容,自动查找.cpp文件?
- Arduino Makefile:如何将传感器数据保存到计算机中的文件中
- 使用GCC的C makefile - 从子文件夹列表中生成源文件列表
- 自动工具: Makefile.am:如果文件存在,则链接
- 您可以使用 makefile 从 .o 对象文件创建 C++ 文件吗?
- 多个文件Makefile编译
- 一个文件Makefile问题:C++