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

我觉得SCons的应用手册的顺序编排还是可以的,至少最前面的这部分编排是不错的。非常有助于一个了解过Makefile的人去做转行的学习。前面实现了简单的单文件的编译,这一次接下来至少先尝试实现一下单目录多文件的编译了。在这次尝试的过程中,暂且也忽略掉文件依赖的概念。

为了能够实现上面的例子,首先创建几个代码文件。为了能够看看最终编译的效果,我在file1.c和file2.c中放了一个pritnf,打印一下提示信息。然后,在prog.c的main函数中调用。

之后,采用上面的配置文件信息进行测试的效果:

看得出来,构建构成。这里生成了一个叫做prog的可执行文件,为什么叫这个名字呢?文档中做了解释,如果这个可执行文件的名字没有给出来具体的名称,那么可执行程序的名称由文件列表中的第一个文件名称决定。

同事,对于多文件(暂时考虑单目录多文件的情况)的处理方法也给了说明,即创建一个列表,每一个文件都是列表中的一个字符串元素。

这样的处理采用python来处理很容易,哪怕是SConstruct的文件中支持的Python特性不多,通过脚本来更新这个配置文件都是容易实现的。

这是指定可执行文件名称的方法,需要在Program的builder method中增加一个参数。按照上面的方式修改之后的测试效果:

能够看得出来,可执行文件的名称被指定成功了。

这里又给出了一个使用通配符来实现的按照文件类别来处理的方法,这样的方法在Makefile中也是有的。真是没有,其实通过python脚本来辅助生成其他的信息也是很容易的。

这是采用通配符的方式实现的一个测试效果。

从这部分的讲解看,SConstruct中的部分python支持处理还是可以的。自然,使用的时候得符合具体的使用规则。不过,类似列表的append处理或许时候不奏效?这一点从某些角度考虑是可以理解的,比如之前就已经看到了这个SConstruct中的代码执行并不像python脚本一样有着严格的执行顺序。不然,类似文件在列表中的追加或许一个append操作就可以了。

Split的应用可以让配置文件中的builder method的部分看上去更加简洁。不过,从自动生成信息的角度来说的话,没有看出什么特别的优势。只要是批处理容易实现,直接用脚本构建SConstruct的时候可读性,尤其是文件列表的可读性就不是那么重要了。当然,如果SConstruct是百分百的手工维护,这样的精简风格还是更有优势的。

这里的参数用法相比前面的表述方式更有可读性上的提高,尤其是对于初步接触的人来说更有优势。然而,这个地方一共就有2个参数的时候,在熟练之后这种可读性的优势也就微乎其微了。

综合看来,在整体的可读性以及维护性上,相比老牌的Makefile方案scons的确还是有一点优势的。但是接下来的尝试才具有真正的工程管理的意义,至少我得能够用这个优雅地处理各种文件文件的依赖关系以及复杂的文件目录结构才能够让这个工具具备真正的生产力加速的效果。

1222_SCons单目录多文件的编译实现相关推荐

  1. hualinux1.9 基础练习:如何删除900W单目录小文件

    需求 有的开发代码写不好,导致单目录下缓存文件近900W个,要求删除这900W个文件,怎搞? 分析 如果是使用rm -rf 肯定不好,会卡死,提示参数过长,看来是把文件名当成参数了.顶多就80W个,已 ...

  2. antd vue表单上传文件_Vue编译出静态文件上传七牛CDN

    Vue作为目前比较流行的前端开发框架,在前后端分离比较时尚的今天异常火热,下面分享下怎么把Vue编译出来的静态文件上传到CDN,在这里主要是七牛云的CDN. Vue项目进行编译 编译命令: npm r ...

  3. php 编译ext目录下的,PHP编译安装后的目录和文件解释?

    大家是通过什么方式了解php编译安装后生成的目录及文件的含义和解释的?是否有专门的文档解释这一方面? 这里只贴目录 php7.2.0 ├── bin ├── etc │   └── php-fpm.d ...

  4. 【错误解决】[Maven] cannot be opened because it does not exist错误[文件无法编译到target目录下的解决方法]...

    转载请注明出处:http://blog.csdn.net/qq_26525215 本文源自[大学之旅_谙忆的博客] 使用IDEA搭建的Maven项目,在写SpringEL和资源调用时出现了如下错误: ...

  5. FAT,FAT32,NTFS单目录文件数量限制

    FAT32FAT32 标称为65534,实际到2万+时已不稳定. NTFS 似乎没有明确限制单目录文件数量,但有人反应在生成10万+ 文件的目录时遇到报错,想来应该是和文件属性(文件名等).磁盘使用状 ...

  6. linux中可读可写可执行权限是什么意思,linux chmod 给目录或文件赋权限 可读可写可执行...

    前提: mode权限设定字串,格式:[ugoa...][[+-=][rwxX]...][,...] 其中u表示拥有者(user),g表示与拥有者属于同一个群体(group),o表示其他以外的人(oth ...

  7. 第二周总结(系统挂载重要目录、文件优化硬件软件安装)

    一. 操作系统挂载概念: 1. 如何使用服务器磁盘: 1)进行磁盘阵列配置 2)进行系统分区操作 3)进行磁盘格式化 4)进行磁盘文件系统创建 5)进行挂载操作使用 2. 如何进行挂载操作: 第一个历 ...

  8. LINUX目录重要文件说明

    LINUX目录重要文件说明 etc目录下重要文件 网卡配置文件 文件保存路径:/etc/sysconfig/network-scripts/ifcfg-eth0 文件说明:网络服务配置文件 文件配置信 ...

  9. JAVA CP936编码转utf8_对一个目录的文件从cp936转换成utf-8

    打开一个文件,确认能够无乱码打开 [xw@localhost work]$ vi NPOSP/src/sjl05.cpp 但是,这里打开的方式是以cp936的编码方式打开的. 编码的选择,记录在~/. ...

最新文章

  1. 关于CSDN不给任何通知强制关闭我的6年博客,我深表痛心
  2. UVa10763 交换学生
  3. Swift 4.2正式发布
  4. python各个解释器的用途-【Python面试】 说说Python解释器种类以及特点?
  5. 计算若干数据的汉明距离总和
  6. Centos7 中文乱码切换中英字符
  7. 3011-基于二叉树的表达式求值(C++,附详细思路)
  8. STM32F103:二.(2)串口控制LED
  9. War3窗口限定小工具发布
  10. PAT1019. 数字黑洞
  11. 原力计划·精英季来了!第一周周榜揭晓,你喜欢的博主上榜了吗?
  12. 为什么很多人选择前端而不选择Java?
  13. 可爱的拼音加加输入法^_^
  14. 扫描服务Windows Image Acquisition(WIA)错误1068的解决办法
  15. Linux基础 - 服务管理(systemd)
  16. 学习记录 --【零基础CSS学习】03.ID选择器和类选择器
  17. Spring cloud config 配置文件加密
  18. 深度linux时间.年日调整,deepin深度商店中的Linux版应用体验分享(一)
  19. Springboot 使用restTemplate 进行跨域请求 response reqeust中首字母大写的问题
  20. java 矫正鱼眼图像_鱼眼图像校正

热门文章

  1. linux命令行安装vnc_Linux Centos7.x下安装部署VNC的实操详述
  2. 【activiti 入门】activiti6.0之事件总结
  3. Flex 非常实用的资料
  4. DAYU200最新烧录OpenHarmony系统教程
  5. 基于Python的2013-2018全国城市空气质量分析
  6. 运维工程师和网络工程师的区别?
  7. html5网页播放声音
  8. u-boot简单学习笔记(三)——AR9331 uboot启动分析
  9. Spring全家桶--SpringCloud(高级)
  10. 树叶贴画机器人_儿童创意手工的意义是什么?