在上两篇文章中已经简单介绍了用scons编译库文件,可执行程序的方法,本篇中将主要介绍scons的其他一些常用参数以及变量。

scons不带参数执行的时候会执行编译动作,对于内容改变过的源文件它会自动重新编译,scons对文件状态的改变靠的是内容的md5而不是时间戳,这是scons和makefile不同的一点。它对文件信息和状态的记录保存在当前目录下的.sconsign.dblite文件中。

scons最常用的参数有两个,-c和-Q。

scons -c可以清除生成的临时文件和目标文件,相当于执行make clean。

scons -Q将产生更少的输出信息。

在编译和链接的过程中经常会附加一些参数,例如定义头文件包含路径,链接库的路径或者宏定义等,这些参数当然都是可以定制的,常用的变量有如下一些:

LIBS:指定链接的库文件,比如要链接 libpthread.so,则写为 LIBS=['pthread']

LIBPATH:库文件搜索路径,例如 LIBPATH=['/usr/local/lib/','.']

CPPPATH:include文件包含路径,例如CPPPATH = ['/home/project/inc']

CPPDEFINES:宏定义,例如CPPDEFINES=’DEBUG’

CC:编译器,默认情况下scons会根据源文件后缀自动判断。

CFLAGS:编译参数,例如CFLAGS = ‘-g -W’

LDFLAG:链接参数,例如LDFLAG = ‘-g’

可以看到,上述变量的值可以为字符串’-g’。当指定多个值时候,采用python中的list类型。

这些变量的使用地点很灵活,一般可以在两个地方使用。

第一种,直接使用在Program,Library等指令中,例如

Program("demo","main.c",CC='gcc',CFLAGS=['-g','-W'],CPPDEFINES=['DEBUG','OK'],CPPPATH='/usr/local/include',LIBS=["demo"],LIBPATH=["."]);

执行scons -Q后的输出如下

[leconte@localhost demolib]$ scons -Q

gcc -o a.os -c -fPIC a.c

gcc -o b.os -c -fPIC b.c

gcc -o main.o -c -g -W -DDEBUG -DOK -I/usr/local/include main.c

gcc -o libdemo.so -shared a.os b.os

gcc -o demo main.o -L. -ldemo

可以看到我们定义的宏都起作用了。

另外一种方式,也是实际项目中会用到的方法,则是预先用Environment设置编译环境

env = Environment(CC = 'gcc', CFLAGS = ['-g','-W'], CPPDEFINES=['DEBUG','OK'],CPPPATH='/usr/local/include',LIBS=["demo"],     LIBPATH=["."])

env.Program("demo","main.c")

这种方式将环境和动作分开,更有条理一些。

linux scons ld_run_path,使用scons替代makefile(3)相关推荐

  1. Linux/Unix开发之make和makefile详解

     无论是在Linux还是在Unix环境中,make都是一个非常重要的编译命令.不管是自己进行项目开发还是安装应用软件,我们都经常要用到make或make install.利用make工具,我们可以 ...

  2. Linux内核学习(五):linux kernel源码结构以及makefile分析

    Linux内核学习(五):linux kernel源码结构以及makefile分析 前面我们知道了linux内核镜像的生成.加载以及加载工具uboot. 这里我们来看看linux内核的源码的宏观东西, ...

  3. linux内核使用scons构建,使用scons软件构建工具

    scons 是一个比较有意思的软件构建工具,其本意是想替代著名的autotools系列,我没有用过autotools,不过看到网上的 autotools使用教程就头晕,后来听说了scons,就仔细下载 ...

  4. linux下c 编译脚本,Linux下编译C语言与makefile脚本语言

    GCC 1.Source CRT 软件:可以控制linux的终端. 2.FileZilla 软件: windows 远程传文件到linux. 使用sourceinsight 文本编辑器 一linux编 ...

  5. Linux系统编程7:入门篇之Linux项目自动化构建工具-Make/Makefile的超强使用指南

    文章目录 (1)前言 (2)依赖关系和依赖方法 (3)单文件Makefile (4)多文件Makefile (5)总结 (1)前言 对于一个大型项目,可能会涉及到很多文件,例如头文件,源文件等等.在V ...

  6. Linux内核驱动模块示例--Helloword及Makefile

    先看一个最简单的驱动程序: //hello.c #include <linux/init.h> #include <linux/module.h> MODULE_LICENSE ...

  7. 嵌入式Linux入门10:编译管理Makefile

    在Linux开发中,Makefile占有比较重要的一席之地.几乎所有的开源项目都会带有Makefile--或脚本产生,或自带.前面的文章也有介绍过,linux环境编译程序有三个步骤:./configu ...

  8. Linux内核将用Nftables替代iptables

    新的防火墙子系统/包过滤引擎Nftables将在Linux3.13中替代有十多年历史的iptables.iptables/netfilter在2001年加入到2.4内核中.诞生于2008年的NFTab ...

  9. linux下Ftp客户端程序与Makefile

    前段时间开发linux如何上传通知window服务程序,遇到上传文件问题,搞了一段时间终于理解了,一起贴出来共同探讨探讨. 解析说明: 如何使用此FTP客户端呢? 使用样例: ./FtpApp  se ...

最新文章

  1. 漫画:崩溃了!!这程序是什么玩意儿!!!
  2. java生成自己定义的表ID
  3. 15行Python 仿百度搜索引擎
  4. idea关闭coverage
  5. 10张图,让你瞬间给自己减压
  6. java做h5小游戏服务端_神藏西游H5游戏源码服务端+客户端+搭建教程
  7. eplices如何导入外部代码_搜索引擎的蜘蛛是如何爬的
  8. 认识大数据分析的四大误区
  9. 使用git软件上传文件到自己的github当中去
  10. 利用vertical-align:middle实现在整个页面居中
  11. Jmeter中生成随机函数和使用csv文件数据
  12. ffmpeg文档5:同步视频
  13. Waymo已经开始绘制亚特兰大地图数据,自动驾驶汽车路测地点又添新城
  14. 利用cmake来编译sim800c,sim868 app
  15. 实现微信小程序授权获取手机号登录(c#后端代码附上 少爷接收)
  16. Python数据分析项目实例5: 分析某餐饮企业的订单详情表数据(基于matplotlib的python数据可视化分析)
  17. php单引号的作用,谈谈PHP中的单引号和双引号
  18. mysql数据库自动停止_解决mysql数据库自动停止方法
  19. 五个角度浅析大数据与BI的区别
  20. h5py基本使用教程

热门文章

  1. 返利机器人分享话术_返利机器人裂变话术
  2. js屏蔽手机的物理返回键
  3. 第4章 点云的滤波与分类 4.1点云数据的过滤
  4. 06 体脂率案例优化
  5. java常用混淆工具(有链接)
  6. winxp 关闭445端口
  7. JME sdk中的中文乱码(全是方框)的解决办法
  8. 中企海外周报 | 银联业务拓展到171个国家和地区;徐工集团向非洲客户提供定制化设备...
  9. [MetalKit]45-Using eGPUs with Metal 在 eGPU上使用 Metal
  10. GO语言环境搭建 + Sublime text 3 + Git + MarGo + gocode 组合配置详解