Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >SCons - 简单而强大的项目编译脚本

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

作者头像
Aichen
发布于 2018-05-18 02:56:30
发布于 2018-05-18 02:56:30
2.8K00
代码可运行
举报
文章被收录于专栏:白驹过隙白驹过隙
运行总次数:0
代码可运行

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'):加入所有文件

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

一个简单例子 将文件放在当前目录,头文件放在上级目录。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
str = Split('main.cpp display.cpp') 2 Program('main',str,CPPPATH = '../'i,LIBS = 'pthread')

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
TARGETNAME = 'server'
  
LIB = Split('jsoncpp logger ACE basetool tinyxml pthread dl rt')

FILELIST = Glob('*.cpp')
 
HEADFILEPATH = Split('../../common/include ../../3rd/ACE_wrappers ../../3rd/include/')
 
LIB_DIR = Split('../../3rd/lib ../../common/lib')
 
Program(target = TARGETNAME,source = FILELIST,LIBS = LIB,CPPPATH = HEADFILEPATH,LIBPATH = LIB_DIR)
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016-07-06 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
SConstruct
3. SConstruct 文件 是一个类似于makefile一样的东西, 告诉 scons做什么,而不是严格的规定soncs做这件事的步骤
sofu456
2020/07/03
1.3K0
Protobuf - 使用scons编译proto文件
使用protobuf过程中,需要先对消息结构进行定义,文件以.proto格式结尾。然后要使用google提供的protoc命令行,把.proto文件转成对应的代码文件。 protoc --proto_path=IMPORT_PATH --cpp_out=DST_DIR path/to/file.proto 这个步骤看起来非常简单,但是在实际项目中,编译过程文件众多,不可能对这个进行单独生成和编译。新的代码文件要保证能随时更新引入。 最后通过scons,研究了会builder,自己定义了protobu
Aichen
2018/05/18
1.6K0
Makefile常用模板
写Makefile大概是每一个合格的C/C++程序员的基本功吧,几乎所有C语言写的开源项目都会用Makefile或者类似的Cmake来组织和编译,可见这个是有多重要。不过说白了,Makefile其实下面就简单记录下Makefile的常用模板,并且附带了自己总结的注意点方便以后查找使用。下面这两个模板是用来搞guisan的。
mythsman
2022/11/14
5720
使用Cython和Nuitka编译Python脚本
在Python中,可以使用py2exe或PyInstaller之类的工具将Python脚本编译成二进制文件,从而提升可移植性,并在一定程度上提升了性能。不过这类工具的实现只是将py文件编译成pyc或pyo,在安全性上还是弱了一些,存在被反编译的风险。
drunkdream
2023/10/19
1.1K0
关于 CMake 使用,看这一篇可能就够了
cmake 是一个跨平台、开源的构建系统。它是一个集软件构建、测试、打包于一身的软件。它使用与平台和编译器独立的配置文件来对软件编译过程进行控制。
字节流动
2021/10/18
6.4K0
Centos6.5安装配置mongodb
上面的安装方法比较简单,但是有个问题,就是mongo启动必须同时制定data,也就是要运行mongod --dbpath /usr/local/mongo/data,比较繁琐,下面介绍一种一劳永逸的安装办法,把mongo的启动添加到服务当中。但是必须制定安装的版本,本例以mongodb-src-r1.8.1.tar.gz 具体可以参考博客:http://www.9958.pw/post/centos_mongodb 注:每个版本必须和博客中一致,下面对rin博客的这篇文章做一下转载!
Java帮帮
2018/12/21
8990
Centos6.5安装配置mongodb
HarmonyOS 开发实践 —— 基于lycium的开源c库编译与集成
lycium的使用说明:lycium的特点就是自动化编译,只需要一个./build.sh命令就可以完成编译,下面的编译例子(openssl)代码库是通过hpkbuild脚本从github或者gitee上面拉取,在hpkbuild脚本中已经默认提供了一套编译默认的配置,也可以按照需求修改。
小帅聊鸿蒙
2024/11/23
3820
HarmonyOS 开发实践 —— 基于lycium的开源c库编译与集成
QT的cmake项目工程配置
QT的项目工程默认使用的是qmake,这本来也没什么问题。但是由于要用到vcpkg这个工具来管理第三方库,好像这个 vcpkg工具只能在cmake的项目中才能使用。
杨永贞
2022/04/13
3.8K0
【Android 安装包优化】使用 lib7zr.so 动态库处理压缩文件 ( 修改 7zr 交叉编译脚本 Android.mk | 交叉编译 lib7zr.so 动态库 )
之前的博客 【Android 安装包优化】p7zip 源码交叉编译 Android 平台可执行程序 ( 下载 p7zip 源码 | 交叉编译 Android 中使用 7z 可执行程序 ) 中 , 下载并编译了 p7zip 开源项目源码 , 交叉编译出了可以在 Android 平台执行的可执行文件 ;
韩曙亮
2023/03/29
8900
【Android 安装包优化】使用 lib7zr.so 动态库处理压缩文件 ( 修改 7zr 交叉编译脚本 Android.mk | 交叉编译 lib7zr.so 动态库 )
Linux C/C++工程中可生成ELF、动/静态库文件的通用Makefile
最近写了一个*nix环境下的Makefile文件,支持编译C/C++,同时能够通过参数配置生成ELF目标文件、动态链接库(.so)和静态链接库(.a)文件。
typecodes
2024/03/29
6150
Linux C/C++工程中可生成ELF、动/静态库文件的通用Makefile
Autotools -- 自动编译链工程构建
虽然现在cmake,qmake 或者 ide的功能越来越强大,也越来越简洁。但是在日常使用中,庞大的开源库,autoconfig 还是占据大半壁江山。
何其不顾四月天
2023/03/10
9200
披着CLion的外衣实则在讲CMake
至于 CLion 安装和基础设置,网上教程一大把,而且不是学习重点,根据自己需求配置即可。
字节星球Henry
2023/03/23
5.9K0
披着CLion的外衣实则在讲CMake
Makefile常用模板「建议收藏」
做开发的特别是C/C++开发者一般都会用到Makefile,然而多数时候在公司做项目都不需要自己去写Makefile,仅仅停留在能看懂的基础上。因为make命令编译实在是太方便了,所以自己写写小项目用一用还是挺好的。网上关于Makefile教程也很多,总结一下近几年用到的常用脚本,方便自己查阅,如果能帮到别人那便是极好的_。
全栈程序员站长
2022/09/02
1.5K0
纯血鸿蒙APP实战开发——使用GTest测试C++案例
本示例主要介绍如何在HarmonyOS NEXT应用中使用GTest测试C++代码。目前鸿蒙没有提供官方C++测试框架,部分Native开发为主的应用可以参考本文接入三方测试框架保证C++代码质量。GTest 是 C++ 测试框架,具有稳定、跨平台、快速等特点,能够为 C++ 开发人员提供有效的单元测试和集成测试工具。GTest 支持 Linux、macOS 和 Windows 操作系统,同时支持 gcc、clang 和 MSVC 等多种编译器和构建系统。GTest 还提供了大量的失败信息,方便开发人员排查问题。
小帅聊鸿蒙
2025/02/18
2140
纯血鸿蒙APP实战开发——使用GTest测试C++案例
CMake常用命令的一些整理
CMake 是什么我就不用再多说什么了,相信大家都有接触才会看一篇文章。对于不太熟悉的开发人员可以把这篇文章当个查找手册。
混说Linux
2022/11/18
1.8K0
用 powershell 脚本 .ps1 写一个自动化的「编译->链接->运行C++文件」脚本
我这人有个毛病:一定要用 VS Code 写代码,确切地说,一定要用我自己的 VS code ,自己配好的键盘映射、自己的插件。
Piper蛋窝
2021/03/24
1.5K0
【CMake教程】(五)CMake 配置install打包
我们编译生成的可执行文件一般,会生成在当前的编译路径下,也就是build或者release路径下。那么如何将编译生成的可执行文件和库文件打包到一起进行发布那?本片教程我们将讲述如何在cmake中配置install的打包路径。下面我们将以mathlib库和头文件为例子进行配置。
CNNer
2020/07/21
9.5K0
【完整版】使用 Rust 进行嵌入式开发
https://club.rt-thread.org/ask/article/2944.html
MikeLoveRust
2021/11/12
2.7K0
CMake使用总结
CMake意为cross-platform make,可用于管理c/c++工程。CMake解析配置文件CMakeLists.txt生成Makefile,相比直接用Makefile管理工程,CMake更灵活和简单。
bear_fish
2018/09/19
2K0
【Android 逆向】Android 进程注入工具开发 ( 总结 | 源码编译 | 逆向环境搭建使用 | 使用进程注入工具进行逆向操作 ) ★★★
源码下载地址 : https://download.csdn.net/download/han1202012/37385877
韩曙亮
2023/03/29
2.2K0
【Android 逆向】Android 进程注入工具开发 ( 总结 | 源码编译 | 逆向环境搭建使用 | 使用进程注入工具进行逆向操作 ) ★★★
推荐阅读
相关推荐
SConstruct
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验