Excel 名称框概述-英雄云拓展知识分享
116
2023-11-07
【摘要】 本书摘自《自己动手写 Python 虚拟机》一书中第3章,第3节,海纳编著。
3.3 整理工程结构
到目前为止,工程里包括头文件在内,已经有13个源码文件了。这些源码文件 都放在同一个目录下。随着更多功能的实现,文件必然会越来越多,这种扁平的目录 结构非常不利于我们管理工程。应该考虑使用构建工具来帮助管理工程。
第一步,先把文件按照功能分别安放到不同的目录中去。新建三个目录为 util、 code 和 object,分别代表:与工具相关,与 CodeObject 相关,以及与虚拟机内建对象 相关。如果工程是由git 管理的,最好使用git mv 命令来移动文件。移动过后的目 录结构如下所示:
L——main.cpp
H——code
l H——binaryFileParser.cpp
l H——binaryFileParser.hpp
」H——codeObject.cpp
」L——codeObject.hpp
+——object
」+——hilnteger.cpp
|H——hilnteger.hpp
l H——hiObject.hpp
|-——hiString.cpp
)L——hiString.hpr
L——util
|+——arrayList.cpp
|H——arrayList.hpp
l L——bufferedInputStream.hpp
同时,不要忘记修改头文件的引用关系。另外,编译命令也变得复杂了,必须在编译的时候通过g++ 的“ -I” 选项指定 include 文件夹。由于在 main.cpp 所在的目录下编译,所以指定的目录就是当前目 录,用“—I.” 表示。
可以看到,编译的命令越来越复杂了。随着新文件的持续添加,命令还会变得更 加复杂。每次敲一大串编译命令,效率低还容易出错。为了解决这个问题,可以借助 于 make 工具。在Linux 上,安装很多应用的时候都会使用 make 工具。
make 工具最主要也最基本的功能就是通过makefile 文件来描述源程序之间的 相互关系并自动维护编译工作。而 makefile 文件需要按照某种语法进行编写,文件 中需要说明如何编译各个源文件和链接生成可执行文件,并要求定义各个任务之间 的依赖关系。
编写 makefile 是一件复杂且枯燥的事情,我不打算手动维护 makefile 。 幸好还 有一个工具可以帮我们自动生成 makefile, 那就是 cmake 。cmake 工具不仅能生成 makefile,还有一条最关键的功能是可以生成跨平台的工程文件,不管你是使用Vis- ual Studio,还是使用xcode, 都可以使用cmake 帮你生成相应平台上的工程文件。
cmake 脚本必须命名为 CMakeLists.txt, 它的可读性很强。首先它通过 PRO- JECT 指令指定了工程名字,接着使用SET 指令分别指定了debug 版本与 release 版 本的编译选项。ADD_EXECUTABLE 指令指定了编译的目标文件以及源文件,如 果以后添加了新的cpp 文件,只要在这里添加一行就可以了。最后,INCLUDE_DI- RECTORIES 指令指定了头文件目录,与 CMakeLists.txt 属于同一个目录。
接着,可以在源代码目录下,创建一个名为 build 的目录。然后在 build 目录里 执行如下代码:
1 build#cmake ../
2 --Configuring done
3 - …Generating done
4 --Build files have been written to:/root/hinusDocs/pythonvm/gitee/pythonvm/src/build
5
6 build#make all
7 [16%]Building CXX object CMakeFiles/railgun.dir/main.cpp.o
8 [33%]Building CXX object CMakeFiles/railgun.dir/object/hiInteger.cpp.o 9 [50%]Building CXX object CMakeFiles/railgun.dir/object/hiString,cpp.o 10 [66%]Building CXX object CMakeFiles/railgun.dir/util/arrayList.cpp.o
11 [83%]Building CXX object CMakeFiles/railgun.dir/code/binaryFileParser,cpp.o 12 [100%]Building CXX object CMakeFiles/railgun.dir/code/codeObject.cpp.o
13 Linking CXX executable railgun
14 [100%]Built target railgun
在 build 目录下可以找到目标文件 railgun 。 这样,我们的工程就全部交给 cmake 管理了,再也不用手动执行编译命令,可以安心地只关注应用逻辑。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们 18664393530@aliyun.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~