关于我
欢迎来到我的博客!这里汇集了我对编程和技术的洞见和总结。本站内容分为几个主要类别,涵盖从具体技术实现到编程理念的广泛话题。
主要内容分类
- 项目工程:深入探讨技术的实现细节和理解。
- C/C++:围绕C/C++语言的技术点和编程技巧进行详细总结。
- 程序员哲学:分享程序员在职业生涯中应该具备的哲学理念和思考方式。
想要了解更多具体内容,您可以访问文章分类页面。
联系我
如果您有任何问题或想要交流,欢迎通过关于页面与我联系。
感谢您的阅读和支持,希望我的博客能为您的技术旅程带来帮助!
Makefile and batch mode运行nemu
之前的分析getopt_long的文档中,便学习了这里的参数传递.
monitor.c文件中关于parse_args函数,对于不同的参数传递的处理.
这里就有一个batch参数,经过测试:
将swtich的参数直接改为’b’,在运行nemu的时候,确实是直接进行batch mode.
那么理论正确后,可以在make run之后加上ARGS=-b参数,直接传递b选项.
batch mode的实现原理
通过查询sdb_set_batch_mode函数的内容,
在sdb.c文件中,这里是直接将变量is_batch_mode的值赋为true
在sdb_mainloop函数中,根据is_batch_mode的值,来决定是否直接将cmd_c的值传入NULL;
关于cmd_c的参数的值的不同而导致的nemu执行指令的次数不同,在关于cmd_c的文档中,分析过了.
命令行中向nemu程序传递参数
nemu中的makefile没有关于ARGS的目标,在scripts中的native.mk中,里面有ARGS目标,通过make run ARGS=-b就可以直接开启batch mode
scripts中的native.mk中的ARGS目标传递过程
RUN目标之后,是调用了git_commit,这里是关于记录追踪的.无关
目标NEMU_EXEC,NEMU_EXEC目标中包含了ARGS目标.
该makefile中,还有关于ARGS的复写.
两句追加操作,重要的是后面的ARGS_DIFF目标的追加
ARGS的追加
如果没有make run ARGS=-b进行创建ARGS参数,那么native.mk中的第一句override不会生效.
override的覆写
如果ARGS在命令行中被定义,那么Makefile的赋值操作会被忽略,当native中的ARGS中的赋值操作都是追加,不会产生意料之外的行为,这样做是为了多一重保险.(使用override关键字)
后面的追加ARGS_DIFF目标,没有在ysyx的Makefile和nemu的Makefile,以及nemu的scripts的三个.mk文件中找到
-include
这里的用法就是如果文件不存在,makefile不会报错,并且继续按照规则执行.
am中的ARGS传参
文档中写的关于am中的大致编译过程,加上之前分析的在nemu中的makefile过程.
在abstract-machine中,查看Makefile,里买难关与一些ARCH等参数和编译参数.然后查看riscv32-nemu.mk,这里都是几个参数的追加.
然后查看nemu.mk中.
在run目标中,有ARGS参数,其中来自NEMUFLAGS目标.
NEMUFLAGS中以及有了log参数,记录跟踪.只需要追加-b即可.
abstract-machine中的makfile其他
使用.mk后缀,片段化makefile规则,在不同的makefile文件中include不同的叶子.
A-MHOME下的makfile,显示定义了工作目录,一些文件位置
然后使用AS,CC,CXX,LD,AR定义了编译过程的工具.
并且使用CFLAGS给c编译器传参,CXXFLAGS给c++编译器传参,ASFLAGS给汇编器传参,LDFLAGS给链接器传参.
在am中的cputests进行编译程序,那么WORK_DIR就是cputests,DST_DIR就是子目录build.
在编译命令块中.
将对应的.c文件,或者.cc等其他源文件,全部只编译成.o文件,不链接.
mkdir -p用于确认目录一定存在.
-std=gnu11用于使用GNU C 11的标准.-c,只编译.-o 对应的.o文件
项目中使用了c++17的标准.
主要看IMAGE这里:
$(IMAGE).elf依赖与所有的目标文件和LIBS(库),在运行时环境中,我关注的点就是这个库,这里的库和GNU/Linux中的库不是完全一致的.
而LIBS的被赋值,使用了懒惰赋值,只计算当前值,而不是在引用LIBS的时候才计算LIBS的值.
If you like this blog or find it useful for you, you are welcome to comment on it. You are also welcome to share this blog, so that more people can participate in it. All the images used in the blog are my original works or AI works, if you want to take it,don't hesitate. Thank you !