SCons - 简单而强大的项目编译脚本

news/2024/6/29 12:13:51 标签: 编译器

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)

http://www.niftyadmin.cn/n/1512896.html

相关文章

CGI——(通用网关接口)

Common Gateway Interface,简称CGI。在物理上是一段程序,运行在服务器上,提供同客户端HTML页面的接口。这样说大概还不好理解。那么我们看一个实际例子: 现在的个人主页上大部分都有一个留言本。留言本的工作是这样的:…

泛型系列5:链表的实现

4.6 链表的实现 问题 您需要链表数据结构&#xff0c;这样就可以很容易地添加和删除元素。 解决方案 使用泛型LinkedList<T>类。下面的方法创建了一个LinkedList<T>类&#xff0c;并往链表对象中添加节点&#xff0c;然后使用了几种方法从链表节点中获得信息。 pub…

理解caffe中的proto文件

概要 caffe.proto是google开源的一种数据交互格式。用它来定义数据结构&#xff0c;个人认为caffe.proto是caffe框架的血脉&#xff0c;贯穿始终&#xff0c;是理解caffe框架十分重要的一环&#xff0c;有它的存在caffe才是一个完整的框架&#xff0c;没有它&#xff0c;就无法…

八伟大的工具,Windows用户永远都不想错过

有许多的应用程序你可以找到&#xff0c;但是获得免费并且好用 的程序不是一件容易的事情&#xff0c;每当你需要这样的软件的时候&#xff0c;你就会网上搜啊搜&#xff0c;结果下载下来一运行达不到想要的效果&#xff0c;这就是今天我分享我收藏的8个工具原因&#xff0c;这…

公私钥

私钥&#xff1a; openssl genrsa -out priv.key 1024公钥&#xff1a; openssl rsa -in priv.key -pubout -out pub.key 加密&#xff1a;用公加密。私 解认证&#xff1a;私加密 公解转载于:https://www.cnblogs.com/hailuo/archive/2011/12/06/2277779.html

记录包执行的日志 转

MicrosoftSQL ServerIntegration Services 包括日志记录功能。这些功能公开了用于日志记录的运行时事件&#xff0c;支持各种日志记录提供程序&#xff0c;并且提供有关日志记录的常见请求信息。信息可以记录到文本文件、SQL Server Profiler、SQL Server 数据库的sysssislog 表…

测试视屏帧率

测试视屏帧率的代码 //C代码 // 记录帧率static map<int, int> fps_record;static map<int, std::chrono::steady_clock::time_point> fps_time;fps_record[channel_id];auto last_rec_time fps_time[channel_id];auto passed std::chrono::duration_cast<st…

C#_Access连接问题

1、找不到可安装的 isam 2、无法启动应用程序。工作组信息文件丢失&#xff0c;或是已被其他用户以独占方式打开 using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;us…