scons简易手册

2023-05-16

在编译大程序时免不了要写个makefile来管理,但是makefile的规则对于大多数人来说都还太复杂了。于是我找到了autotools工具,尽管方便了一些,但是还是不够傻瓜。目前scons是我用过最傻瓜的。基本教程这里就不在累赘了,网上多的事,这里只是写常用变量和函数的汇总。

详细英文文档地址:

http://www.scons.org/doc/production/HTML/scons-man.html

下面是以为译者对英文文档的前几章翻译

http://blog.csdn.net/andyelvis/article/details/7074195

 

sconstruct是执行Scons的脚本文件,Python脚本。

c:>scons 执行sconstruct中脚本

Build command in sconstruct:

1.编译为可执行程序

Program('hello.c') 编译hello.c可执行文件,根据系统自动生成(hello.exe on Windows; hello on POSIX)

Program('new_hello','hello.c') 指定Output文件名(new_hello.exe onWindows; new_hello on POSIX)

Program(['main.c', 'file1.c', 'file2.c']) 编译多个文件,Output文件名以第一个文件命名(main.exe;main)
Program('program', Split('main.c file1.c file2.c'))

Program('hello',Glob("*.c"))

2.编译为二进制对象

Object('hello.c') 编译hello.c目标文件,根据系统自动生成(hello.obj on Windows; hello.o on POSIX)

3.编译为库文件

.Library('foo', ['f1.c', 'f2.c', 'f3.c']) 编译library

SharedLibrary('foo', ['f1.c', 'f2.c', 'f3.c']) 编译 static library

StaticLibrary('foo', ['f1.c', 'f2.c', 'f3.c']) 编译 shared library
4.使用多参数的例子

Program('prog.c', LIBS=['foo', 'bar'], LIBPATH='.') 连接库,不需加后缀或是前缀

5.判断源文件是否修改

SourceSignatures('MD5') 根据内容是否改变,默认方式

SourceSignatures('timestamp') 根据修改时间,类似makefile

6.判断目标文件是否改变

TargetSignatures('build') 根据编译结果
TargetSignatures('content') 根据文件内容,如果只是加了句注释,将不会被重新编译

7.文件依赖

Ignore(hello, 'hello.h') 忽略某个依赖关系

Depends(hello, 'other_file') 明确依赖关系

8.Scons可以常用的参数

1. scons -c   clean

2. scons -Q 只显示编译信息,去除多余的打印信息

3. scons -Q --implicit-cache hello 保存依赖关系

--implicit-deps-changed 强制更新依赖关系

--implicit-deps-unchanged 强制使用原先的依赖关系,即使已经改变

9.常用关键字(变量):

LIBS          //要连接的库文件

LIBPATH      //库文件路径

CCFLAGS     //编译标志

CPPPATH     //头文件

Program('hello.c', CPPPATH = ['include', '/home/project/inc'])

 

下面是使用环境来制作编译
1.创建环境变量

env = Environment()

env.Program('foo.c') 根据不同系统创建不同的编译环境变量

也可以改变:

env = Environment(CC = 'gcc',CCFLAGS = '-O2')

2.复制环境变量

env = Environment(CC = 'gcc')

opt = env.Copy(CCFLAGS = '-O2')
dbg = env.Copy(CCFLAGS = '-g')

3.获取环境变量

env = Environment()

print "CC is:", env['CC']

4.扩展环境变量

env = Environment()
print "CC is:", env.subst('$CC')

5.替换环境变量

env = Environment(CCFLAGS = '-DDEFINE1')
env.Replace(CCFLAGS = '-DDEFINE2')
env.Program('foo.c')

6.尾部增加环境变量值

env = Environment(CCFLAGS = '-DMY_VALUE')
env.Append(CCFLAGS = ' -DLAST')
env.Program('foo.c')

7.头部添加环境变量值

env = Environment(CCFLAGS = '-DMY_VALUE')
env.Prepend(CCFLAGS = '-DFIRST ')
env.Program('foo.c')

使用

1.看编译命令未展开

Input:

env = Environment(CCFLAGS = '-DFOO')
print "CCCOM is:", env['CCCOM']

Output:

CCCOM is: $CC $CCFLAGS $CPPFLAGS $_CPPDEFFLAGS$_CPPINCFLAGS -c -o $TARGET $SOURCES

2.看编译命令已展开

Input:

env = Environment(CCFLAGS = '-DFOO')
print "CCCOM is:", env.subst('$CCCOM')

Output:

CCCOM is: gcc -DFOO -c -o

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

scons简易手册 的相关文章

  • 【滤波算法】KF及其衍生

    1 KF家族 xff08 和优化的比较 xff09 卡尔曼滤波器是1958年卡尔曼等人提出的对系统状态进行最优估计的算法 随后基于此衍生了各种变体算法 xff0c 比较常用的有扩展卡尔曼滤波EKF 迭代扩展卡尔曼滤波IEKF 误差状态卡尔曼
  • Google Pay 谷歌支付(gateway = stripe)

    Google pay 国际版开发 一 官网地址 xff08 科学上网 xff09 官方对接文档 https developers google com pay api android overview Stripe对接Google Pay
  • Python(算法综合)问题 G: 图的遍历——广度优先搜索

    问题 G 图的遍历 广度优先搜索 题目描述 广度优先搜索遍历类似于树的按层次遍历的过程 其过程为 xff1a 假设从图中的某顶点v出发 xff0c 在访问了v之后依次访问v的各个未曾被访问过的邻接点 xff0c 然后分别从这些邻接点出发依次
  • error while loading shared libraries: lib*.so: cannot open shared object file: No such file or

    原文地址 https www cnblogs com Recan p 6012305 html 相关文章 1 解决error while loading shared libraries libXXX so X cannot open sh
  • SecureCRT串口log输出时间信息

    原文地址 SecureCRT串口log输出时间信息 wfzlry的博客 CSDN博客 securecrt显示时间 目录 0 SecureCRT版本信息 1 连接串口之前的全局设定 xff1a 2 Quick Connect连接串口 3 查看
  • Unresolved reference: BR

    我遇到的问题是JDK版本过新导致的找不到资源 在Android studio Fox版本里默认是jdk11改为1 8即可成功编译
  • Java基础22 多线程之多生产者多消费者

    一 单一生产者消费者 包子案例 多个类 xff08 称为线程一类 xff0c 线程二类 xff09 需要一个共有的变量 xff0c 即将这个变量封装为一个类 xff08 称为属性类 xff09 的属性 xff0c 注意属性类的属性修饰符为p
  • 后台开发SQL技术总结

    一 字符串截取 1 substring str pos 用法 从字符串的第 4 个字符位置开始取 xff0c 直到结束 mysql gt select substring 39 example com 39 4 43 43 substrin
  • android 系统调试小知识

    xff11 xff0c 没有串口 xff0c adb 测试过程断开连接可以提前输入下面指令 xff0c 这样adb 断开也可以在后台抓log xff0c 然后copy 出来分析就可以了 nohup logcat gt sdcard 111
  • 让vivado支持(gd/winbond/mx)原本官方不支持的FLASH烧写

    软硬件环境 主控 Zynq UltraScale xczu9 Flash GD25Q128E GD55B02GE 系统 petalinux 2021 2 Kernel 5 10 0 Vivado 版本 2022 2 概述 承接上一篇 zyn
  • 约瑟夫环问题详解

    已经经历过两次考试中都遇到了约瑟夫环问题 xff0c 就问题本身而言并不难 xff0c 主要是在理解问题上经常由于题干较短 xff0c 没有理解清楚意思从而导致无法解题 问题描述 xff1a 约瑟夫环 xff08 约瑟夫问题 xff09 是
  • 【XR】画面剧烈颤动与延时

    VR中的ATW xff08 Asynchronous TimeWarp xff09 技术可以帮助解决由于帧率不稳定 延迟等因素导致的运动模糊和晕眩问题 当VR头戴式显示器无法在下一帧之前及时更新时 xff0c ATW会使用上一帧数据来生成一
  • Ubuntu 20.04安装RTL8812BU网卡驱动教程

    系统版本 xff1a Ubuntu 20 04 3 LTS 网卡芯片 xff1a RTL8812BU 目录 前言网卡芯片识别Windows下查看网卡芯片Linux下查看网卡芯片 安装驱动备注 前言 由于以后工作需要使用Linux系统 xff
  • mysql [Err] 1118 - Row size too large (> 8126).

    错误代码 xff1a 1118 Row size too large gt 8126 Changing some columns to TEXT or BLOB may help In current row format BLOB pre
  • 批处理taskkill运行结束不掉程序以及停留问题

    我原来就一句代码 TASKKILL F IM QQ exe 保存为taskkill bat xff0c 结果运行起来一直显示 xff0c 但是没有结束掉进程 xff0c 百度搜索才知道taskkill为系统关键字 xff0c 不能命名为ta
  • 学习挖掘机和程序员哪个好

    guanghuacheng guanghuacheng 等 级 xff1a 结帖率 xff1a 0 00 楼主发表于 xff1a 2011 04 14 16 57 13 快要高考了 学习成绩一般 不想上了 家里让去学挖掘机 我不想去 要想培
  • irtualbox虚拟机进行网络配置,实现内网外网互通!桥接!

    irtualbox虚拟机进行网络配置 xff0c 实现内网外网互通 xff01 桥接 xff01 xff01 以下是引用片段 xff1a 实验环境如下 xff1a virtualbox上运行的虚拟机 xff1a windows 2008 e
  • 我的2014作的一手好死,2015求轻虐

    真的好想上来开头就写 新的一年 xff0c 全新的自己 xff0c 但是这样自欺欺人的话我还是别说了 xff0c 省得一大批损友又来吐嘈我 2015年希望找到自己的另一半这样的话我也不想再提了 xff0c 因为这样写了两年 依旧单身 xff
  • 织梦后台登陆不上提示验证码不正确

    1 密码明明正确的 xff0c 却无法登陆后台管理 解答 xff1a 此外 xff0c 不管是新人 xff0c 还是phper xff0c 都要注意的是 xff1a 用户名和密码只能由 a z A Z 64 这些字符组成 xff0c 不能是
  • 复选框单选框与文字对齐问题的研究与解决

    原文地址 xff1a http www zhangxinxu com wordpress p 61 56 前言 目前中文网站上面的文字 xff0c 就我的个人感觉而言 xff0c 绝大多数网站的主流文字大小为12px xff0c 因为在目前

随机推荐

  • iOS系统及微信中不支持audio自动播放问题

    span class hljs tag lt span class hljs title script span span class hljs attribute src span 61 span class hljs value 34
  • 模拟复选框

    span class hljs doctype lt DOCTYPE html gt span span class hljs tag lt span class hljs title html span gt span span clas
  • 【SLAM综述】A Survey on Deep Learning for Localization and Mapping

    A Survey on Deep Learning for Localization and Mapping Towards the Age of Spatial Machine Intelligence
  • 树莓派设置开机执行, 指定用户和用户组

    Linux 开机执行有几种方式 一种是设置成系统服务 随着系统加载而启动 另一种是修改 etc rc local 脚本 在 exit 之前加入需要执行的语句 后者默认是以 root 用户执行 非 root 执行可以这么写 su yourna
  • 验证码刷新

    lt label span class hljs keyword class span 61 span class hljs string 34 focusa 34 span gt 看不清 xff1f lt a href 61 span c
  • 如何从数据库调出数据显示到页面PHP+Mysql+Html(简单实例)

    首先显示一下数据库的数据 页面信息 lt DOCTYPE html PUBLIC 34 W3C DTD XHTML 1 0 Transitional EN 34 34 http www w3 org TR xhtml1 DTD xhtml1
  • PHP+MYSQL+HTML 学生成绩查询

    首先创建一个数据库名为 xscj xff0c 表信息如下 xff1a 页面信息为 xff1a lt DOCTYPE html PUBLIC 34 W3C DTD XHTML 1 0 Transitional EN 34 34 http ww
  • php试题与答案(一)

    1 xff0e mysql connect 与 64 mysql connect 的区别是 B A 64 mysql connect 不会忽略错误 将错误显示到客户端 B mysql connect 不会忽略错误 将错误显示到客户端 C 没
  • php试题与答案(二)

    37 xff0e 在str replace 1 2 3 函数中1 2 3 所代表的名称是 B A 34 取代字符串 xff02 xff0c xff02 被取代字符串 xff02 xff0c xff02 来源字符串 xff02 B xff02
  • PHP实现上一页下一页翻页代码实例

    lt php 1 xff0c 将数据库的所有记录查询出来 xff0c 然后再一页一页的显示 link 61 mysql connect 39 localhost 39 39 root 39 39 123 39 mysql select db
  • QT项目升级(QT4.6.3到QT5.2)时,遇到的问题和解决方法

    QT4 升级到 QT5 改动 PC部分 xff1a 改 QTDIR 变量 在工程根目录下找到 user 文件 如 InnoTabPlugin vcxproj user 修改指向你的 QT5 根目录 xff1a lt PropertyGrou
  • c++中ifstream一次读取整个文件

    c 43 43 中一次读取整个文件的内容的方法 xff1a 1 读取至char 的情况 cpp view plain copy std ifstream t int length t open 34 file txt 34 open inp
  • webkit/chromuim/CEF3介绍

    一 浏览器主要构成 浏览器的主要构成High Level Structure 浏览器的主要组件包括 xff1a 1 用户界面 xff0d 包括地址栏 后退 前进按钮 书签目录等 xff0c 也就是你所看到的除了用来显示你所请求页面的主窗口之
  • python多文件使用同一个全局变量的定义和使用方法

    Python是一种面向对象的开发语言 xff0c 在函数中使用全局变量 xff0c 一般应作全局变量说明 xff0c 只有在函数内经过说明的全局变量才能使用 xff0c 下面介绍下Python全局变量有关问题 应该尽量避免使用Python全
  • D3VO 2020CVPR论文阅读

    Deep Depth Deep Pose and Deep Uncertainty for Monocular Visual Odometry 论文链接 摘要 xff1a 提出的D3VO单目视觉里程计框架从三个层面上利用了深度学习网络 xf
  • python在windows下获取cpu、硬盘、bios、主板序列号

    此处使用的是wmi库 xff0c 可以去google里面搜索 python wmi import os sys import time import wmi zlib def get cpu info tmpdict 61 tmpdict
  • gcc中调试代码常用的宏

    红色是比较常用的 宏 意义 FILE 本文件名 LINE 本行位于该文件的第几行 FUNCTION 函数名 PRETTY FUNCTION c语言中和同上 xff0c C 43 43 中稍有区别 VA ARGS 格式化输出 VA ARGS
  • Qt基础学习(5)-----抽屉效果之QToolBox

    cpp view plain copy print mydialog h ifndef MYDIALOG H define MYDIALOG H include lt QDialog gt class QToolBox class MyDi
  • linux下c语言抓包库libpcap

    安装命令 xff1a sudo apt get install libpcap dev 由于自己还没仔细研究过 xff0c 暂时也只是想在这里留个记录 xff0c 方便以后需要时使用 下面是百度百科里的例子 include lt pcap
  • scons简易手册

    在编译大程序时免不了要写个makefile来管理 xff0c 但是makefile的规则对于大多数人来说都还太复杂了 于是我找到了autotools工具 xff0c 尽管方便了一些 xff0c 但是还是不够傻瓜 目前scons是我用过最傻瓜