全部学习汇总: GitHub - GreyZhang/g_SCons: A new member in my toolbox, looking forward to replacing make tool later.

这个例子在我看到的文档中是没有的,但是这个却是我一直想要看到的一个状态。因为,多目录、多文件、相互交叉引用的应用才算得上是一个实用工程的功能典型代表。为了能够做相应的验证,我自己创建了一个简单的工程,工程中包含了5个简单的模块。具体的目录信息如下:

一共有5个目录,10个文件。除了main模块之外,每一个目录中都包含一对儿文件,分别有一个C文件和一个头文件。其中,comm这个模块作为共用的模块会被其他的每一个模块引用。而main作为一个集中的程序模块,包含一个main函数并且调用其他所有模块的函数。这样,一个基础的示范工程就基本就绪了。另外,在根目录的位置放了SCons的配置文件。

如果要实现这样的工程的管理,按照之前的基础的知识需要完成的主要内容需要有:

1,指明工程的可执行文件的名字;

2,需要知道接下来需要处理的代码文件都是哪些;

3,为了能够让SCons找到被引用的头文件,需要指明头文件所在的目录。

如此,SConstruct的构建比较简单了。需要说明的是,CPPPATH其实只能够指明头文件的搜索目录,但是无法指明C文件的搜索目录。我觉得应该还会有一个类似的功能让我们的配置写得更加简洁。但是,目前在找到这个答案之前我采用的方法是通过相对目录的方式直接给每一个文件指明所在的目录。

如此,我的配置文件内容如下:

如此,我期望我自己的工程编译出来的可执行文件名称是test。

这是编译测试的效果,看起来还是可以的。

从前面的信息基本知道,现在默认的编译差异判断是根据MD5校验和来判断的。接下来,我改变几个文件的时间戳来试一下,是否会出现新的重新编译。

从结果看,其实是没有发生变化的。接下来,我在test.h中增加一行注释,看看接下来的效果。

为了能够有明显的对比效果,我等待一分钟后进行编译测试。

可以看得出来,有新的编译效果。但是test其实是没有更新的,这就是前面看文档的时候看到的一个节省编译效果的一个例子了。

接下来,尝试让这个行为更像make的模式。在配置文件中增加Decider('make')后测试:

可以看的出来,现在基本上是一个make的行为了。

那么如何可以确认实现一个混合模式的编译呢?其实还是可以通过注释来处理,如果修改了注释,时间戳发生了变化接下来就会去执行MD5校验和的计算。但是,目标文件不会发生变化,因此test不会更新。但是,在进行大量的文件判断处理的时候这样是有优势的变化的。

从上面的时间戳信息可以看得出与我们期待一致的结论。

这样,不仅仅是把基础的环境搭建尝试了一下,还尝试了不同的编译差分判断模式。如果习惯性考虑,直接采用make的模式应该就是不错的选择了。

最后,测试了一下并行编译的功能。也是可以直接支持使用的,而且从滚屏的速度上的确是看到了速度上的差异。编译之后的软件执行跟之前的效果也是一致的。

1231_使用SCons实现多目录多文件且跨目录引用的编译环境搭建(linux + gcc)相关推荐

  1. python扫描目录下文件_Python扫描目录读取文件,不考虑子目录

    这篇文章主要为大家详细介绍了Python扫描目录读取文件,不考虑子目录,具有一定的参考价值,可以用来参考一下. 感兴趣Python扫描目录读取文件,不考虑子目录的小伙伴,下面一起跟随512笔记的小编罗 ...

  2. EDK2编译环境搭建、编译、在模拟器运行、在笔记本运行(带目录版本)

    前言 自己对写操作系统这个事情比较感兴趣,但是这条路太漫长,只能慢慢来,原来是基于传统的汇编+C语言编写,现在UEFI基本很普及了,因为想着使用国外的操作系统始终存在安全隐患,所以想好好学习一把,由于 ...

  3. 黑莓java文件怎么安装程序_黑莓开发环境搭建windows7+eclipse+BlackBerry Java Plug+JDK6...

    最近有点空闲时间,所以就学学黑莓开发,当然要开发第一步就是搭建开发环境,google了一下,有很多教程,但都是很老的了,可能是因为国内开发黑莓的人很少吧.黑莓的好处就是出了名的安全,所以有一批忠实的粉 ...

  4. 文件后缀名(项目与编译环境经验记录1)

    1.C语言编译成功后生成后缀名为.o文件 (1)是编译成功后的文件,以hello.c为例: 先将源文件编译成目标zhi文件: gcc - c hello.c 这样就生成hello.o文件,再将目标文件 ...

  5. woo如何监听目录和文件变动,woo目录中的文件被改变,监听文件被修改权限

    记录下woo语言监听文件和和文件夹变动后触发事件 非常完整的例子了. 注意由于文件监听属于工具类,则需要使用wop而不是woo print('file notify')-- 初始化监听实列 local ...

  6. Metabase在linux二次开发编译环境搭建(之一---下载文件)

    一.下载JDK8(如果你已安装过jdk8,此步骤可以略过)    http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downlo ...

  7. java删除目录以及目录下文件,java删除文件、删除目录及目录下的文件

    import java.io.File; public class FileUtils { /** * 删除文件,可以是文件或文件夹 * @param fileName:要删除的文件名 * @retu ...

  8. 鸟哥的Linux私房菜(基础篇)- 第六章、Linux 的文件权限与目录配置

    第六章.Linux的文件权限与目录配置 最近更新日期:2009/08/18 Linux最优秀的地方之一,就在于他的多人多任务环境.而为了让各个使用者具有较保密的文件数据,因此文件的权限管理就变的很重要 ...

  9. linux-basic(6)linux的文件权限与目录配置

    [6.1]用户与用户组 1)linux用户身份与用户组记录的文件 /etc/passwd 默认情况下所有系统上的账号都记录在该文件: /etc/shadow 用户密码记录在该文件下: /etc/gro ...

最新文章

  1. 关于大XML文件与大节点处理(System.Xml.XmlTextReader)
  2. OpenAI推新程序包:GPU适应十倍大模型仅需增加20%训练时间
  3. 【微信小程序企业级开发教程】界面跳转方法总结
  4. oracle用户名无法登陆,sysdba却可以登陆
  5. 计算机科学与技术专业 翻译,计算机科学与技术专业外文翻译--网络.doc
  6. 基础编程题目集 6-6 求单链表结点的阶乘和 (15 分)
  7. 万字长文:解读区块链7类共识算法
  8. 系统架构设计师-软件水平考试(高级)-理论-项目管理
  9. CB Insights发布AI行业25大趋势:中国人脸识别、无人商店发展迅速
  10. ubantu系统之快捷键使用
  11. Java中String转换int
  12. NYOJ4——ASCII码排序
  13. Solr 4.10.3 后台管理页面介绍
  14. 华为ensp 交换机vlan配置
  15. Agv、Rgv 车辆控制调度系统开发第七篇-选车算法
  16. 【SpringMVC】——图解执行流程
  17. 计算机科学丛书之第9章和第10章代码
  18. 湖大ACM10155——Making change
  19. mysql备份表语句
  20. 三菱FX5U系列PLC模拟量使用方法及相关参数设置

热门文章

  1. 牛客国庆集训day5 B 电音之王 (大数乘模)
  2. android+世界地图高清版大图片,世界大地图app下载-世界大地图全息实景安卓版 - 超好玩...
  3. DM365 dvsdk_4_02_00_06开发环境搭建
  4. 第三届字节跳动青训营——架构学习
  5. 十中营养价值较高的水果
  6. VirtualBox安装增强功能时报错:未能加载虚拟光盘 到虚拟电脑
  7. JAVA开发(史上最完整追本溯源JAVA历史、发展和学习)
  8. 什么是开源生态?———— 《硅谷生态圈》书评
  9. 计组—运算器实验报告1最全分析总结
  10. Java:实现确定四个3D点是否位于同一平面上算法(附完整源码)