c++ - 在 C++ 中使用 MinGW 工具包含多个类/.o 文件
问题描述
我想将 2 个类编译成 .o 文件并将它们包含在从 avl.cpp 主文件创建的 Test.exe 文件中。
我在执行此操作时使用了 MinGW 工具,但是当我在mingw32-make
CMD 中键入命令时没有任何反应。当我只用一堂课做这个时,没有问题。makefile文件的内容如下:
all: compile execute
compile:
g++ -I ./include/ -o ./lib/AVLClass.o -c ./src/AVLClass.cpp
g++ -I ./include/ -o ./lib/PersonsClass.o -c ./src/PersonsClass.cpp
g++ -I ./include/ -o ./bin/Test ./lib/PersonsClass.o ./lib/AVLClass.o ./src/avl.cpp
execute:
./bin/Test
解决方案
Makefile 使用依赖关系来确定以什么顺序构建的内容。所以这条线execute:
应该真的是execute: compile
告诉 make在步骤完成execute
后执行该compile
步骤。
但是您真的应该将编译和链接拆分为步骤以使用 make 的依赖关系解决特性。
这是我的做法:
BINEXT=.exe
CXX=g++
MKDIR=mkdir -p
RM=rm -f
all: bin/Test$(BINEXT) test
lib/%.o: src/%.cpp
$(MKDIR) lib
$(CXX) -c -o $@ $^
bin/Test$(BINEXT): lib/AVLClass.o lib/PersonsClass.o lib/avl.o
$(MKDIR) bin
$(CXX) -o $@ $^
test: bin/Test$(BINEXT)
bin/Test$(BINEXT)
clean:
$(RM) lib/*.o bin/Test$(BINEXT)
请注意,缩进必须是制表符,而不是空格。
实际上我不会添加test
到all
目标中。如果用户想要运行,最好将其留给用户make test
。
推荐阅读
- javascript - 按键后的Three.js移动动画不起作用
- python - 为什么我的线性回归表现不佳?
- angular - 无法在页面上找到 firebase ui 小部件 - Angular 测试环境
- flutter - Flutter Autocomplete 小部件延迟更新建议
- r - How do I install the arrow package on RStudio Cloud with lz4 support?
- sqlite - SQLite3,使用 ORDER BY 时:“数据库磁盘映像格式错误”
- sequelize.js - 从响应中删除“包含”表名 - Sequelize
- reactjs - initialRouteName 不起作用,React-Native
- ios - 允许根据 UITouch.TouchType 使用 point(inside:with:) 与后面的视图交互。(PKCanvasView)
- c# - 对字典中的数组进行排序