N年前学的makefile,当时还勉强能写一些简单的工程编译,现在已经基本忘了。makefile确实编写复杂,而且平时也不是经常使用,容易忘记。偶识了scons,一切都变的简单了。最近研究了下scons,原来需要上百行的makefile编译过程,现在只需要十行不到,而且没有makefile那些繁杂的结构语法,完全使用python语言就可以进行编译脚本编写,非常好记忆和编译一些大的工程。

直接使用apt-get install scons命令就可以完成安装,需要python环境。

Scons命令

scons:进行代码文件编译

scons -Q:进行代码文件编译,不显示Scons内部操作打印的信息,只显示编译信息

scons -c:清除编译中间文件和可执行文件

Scons编译脚本

Scons对应的编译脚本名称为SConstruct,就如同make对应的编译脚本为makefile

SConstruct脚本编写

编译函数

Program():执行编译操作,生成可执行文件

Library():执行编译操作,生成静态库

StaticLibrary():执行编译操作,生成静态库

SharedLibrary():执行编译操作,生成动态库

Environment():编译环境

编译参数

target,生成的执行文件名字

source,编译文件

LIBS,依赖库

LIBPATH,依赖库路径,有环境变量的可不添加,针对用户库或第三方库

CPPPATH,头文件路径

CCFLAGS,编译参数

其他函数

Split():将字符串分隔为列表

Glob('*.cpp'):加入所有文件

编译参数可以以任意顺序加入编译函数,编译函数依据编译参数对代码文件进行编译。

一个简单例子

将文件放在当前目录,头文件放在上级目录。

1 str = Split('main.cpp display.cpp')
2 Program('main',str,CPPPATH = '../'i,LIBS = 'pthread')

一个复杂项目的例子

大多项目都可以套用的格式,Program内参数多个文件需要以python列表形式作为入参,这里可以用Split对文件字符串分隔为列表输入。直接用Glob('*.cpp')包含当前目录所有需要编译的cpp文件。

 1 TARGETNAME = 'server'
2
3 LIB = Split('jsoncpp logger ACE basetool tinyxml pthread dl rt')
4
5 FILELIST = Glob('*.cpp')
6
7 HEADFILEPATH = Split('../../common/include ../../3rd/ACE_wrappers ../../3rd/include/')
8
9 LIB_DIR = Split('../../3rd/lib ../../common/lib')
10
11 Program(target = TARGETNAME,source = FILELIST,LIBS = LIB,CPPPATH = HEADFILEPATH,LIBPATH = LIB_DIR)

最新文章

  1. WebAPI的Get和Post访问
  2. 【C语言入门教程】7.5 枚举
  3. gcc 版本降级
  4. EXTJS 表单提交
  5. JavaScript代码优化(下载时间和执行速度优化)
  6. Linux 系统 root下目录结构
  7. spring整合springMVC、mybatis、hibernate、mongodb框架
  8. Java JDBC连接SQL Server2005错误:通过port 1433 连接到主机 localhost 的 TCP/IP 连接失败
  9. Quartz.net Cron表达式
  10. BZOJ 1492: [NOI2007]货币兑换Cash( dp + 平衡树 )
  11. MacOS + Linux + Nginx
  12. HDU 4293 Groups
  13. 回家(洛谷 P1592)
  14. XMind与MindManager哪个好(网易云课堂老师:Array老师讲解稿)
  15. 【Python 23】52周存钱挑战3.0(循环计数for与range)
  16. Editplus5.0 注册码
  17. chrome浏览器 新建 标签 页面 跳转到主页(或跳转到谷歌)
  18. java离线地图web GIS制作
  19. RNN的深入理解
  20. mysql decode encode 乱码问题

热门文章

  1. oh,我的老伙计,你看看这近五十个dapr视频
  2. study day2
  3. WebView(网页视图)基本用法
  4. PHP多文件上传格式化
  5. python刷题第三周
  6. django forms的常用命令及方法(一)
  7. 《DotNet Web应用单文件部署系列》三、混淆dll文件
  8. CF643F-Bears and Juice【组合数学】
  9. IdentityServer4[2]:启动一个新的IdentityServer项目
  10. Liunx下Mysql,MongoDB性能优化的配置