Sconstruct
### Sconstruct:Scons编译C++脚本详解 #### 一、Scons简介与应用场景 SCons 是一个开源的构建工具,它使用 Python 语言编写,因此具有跨平台的特性,可以在 Windows、Linux 和 macOS 等操作系统上运行。SCons 的主要优势在于其强大的扩展性和灵活性,可以通过简单的脚本来定义复杂的构建过程。在本文中,我们将重点介绍一个名为“Sconstruct”的SCons构建脚本,并深入探讨其内部工作原理。 #### 二、Sconstruct脚本解析 ##### 1. **脚本命名与使用** - **命名规则**:此脚本名为 `Sconstruct`,这是 SCons 构建系统所识别的主要配置文件名称。在使用前,需将文件名从 `Sconscript.txt` 更改为 `Sconstruct`。 - **使用方式**:放置此脚本于项目根目录下,通过 SCons 命令行工具调用执行。 ##### 2. **环境变量配置** - **路径配置**: - `qtdir`: Qt 库的安装目录(例如 `'C:\developer\qt_vc8'`)。 - `osgdir`: OpenSceneGraph (OSG) 库的安装目录(例如 `'C:\developer\osg'`)。 - `vcdir`: Visual Studio 安装目录(例如 `'C:\\Program Files\\Microsoft Visual Studio 8\\VC'`)。 - `simdir`: 模拟 SDK 的安装目录(例如 `'C:\developer\simSDK'`)。 - **头文件路径 (`inc_path`)**: - 包括了 Qt、OSG、Visual C++、MFC、Platform SDK、OpenGL、模拟 SDK 等库的头文件路径。 - **库文件路径 (`lib_path`)**: - 包含了 Qt 和 OSG 的库文件路径以及项目的程序路径。 ##### 3. **源文件与资源文件** - **源文件 (`src`)**:通过 `Glob` 函数匹配项目中的所有 `.cpp` 文件和 `GenerateFiles` 目录下的 `.cpp` 文件。 - **资源文件 (`res`)**:指定资源文件 `QOSGViewer.rc`。 ##### 4. **构建模式配置** - **调试模式 (`debugcflags`)**: - 配置了调试模式下的编译选项,包括定义 `_DEBUG` 等宏,以及使用 `/MTd` 运行时库等。 - **发布模式 (`releasecflags`)**: - 配置了发布模式下的编译选项,包括定义 `NDEBUG` 等宏,以及使用 `/MT` 运行时库和开启优化等。 ##### 5. **构建目标** - 使用 `Environment` 函数创建构建环境,并根据传入的 `mode` 参数选择构建模式(默认为 "release")。 - 根据选定的构建模式,设置相应的编译器标志、头文件路径、库路径和库列表,并最终构建出可执行文件 `QOSGView.exe`。 #### 三、关键技术点 1. **SCons 构建系统**: - SCons 通过读取 `Sconstruct` 文件来确定构建规则和依赖关系,从而自动化整个构建流程。 2. **多库集成**: - 该脚本展示了如何在一个项目中集成多个第三方库(如 Qt、OSG),并确保它们能够正确地被链接和使用。 3. **编译模式管理**: - 通过定义不同的编译标志来支持调试和发布两种模式,这有助于开发者在不同阶段进行针对性的开发和测试。 4. **路径配置**: - 通过环境变量和字符串操作,动态地构造包含各种库的头文件路径和库文件路径,增强了脚本的通用性和可维护性。 5. **资源文件处理**: - 对于包含资源文件的项目,通过特定函数将其添加到构建过程中,确保最终构建出的应用包含了所需的资源。 #### 四、总结 通过分析上述 Sconstruct 脚本,我们可以看到它是如何通过简单的配置实现复杂构建任务的自动化处理的。这种脚本不仅适用于 C++ 项目,也可以灵活应用于其他类型的软件工程。此外,脚本中的路径配置、构建模式管理和资源文件处理等方面的设计思路,对于初学者来说是非常有价值的实践案例,有助于更好地理解和应用 SCons 构建系统。
#load dll
#modify dll_inc
#modify libs ,whick lib to load
#modify "..\\Program\\TractionEditor" modify to exe name.
qtdir = 'C:\developer\qt_vc8'
qtinc = qtdir + '\\include'
osgdir = 'C:\developer\osg'
osginc = osgdir + '\\include'
osgapi = osginc + '\\osgViewer' + '\\api' + '\\Win32'
src = Glob('*.cpp','GenerateFiles\\*.cpp')
res = RES('QOSGViewer.rc')
dll_inc = '..\\Run'
ui_inc = dll_inc + '\\GeneratedFiles'
vcdir = 'C:\\Program Files\\Microsoft Visual Studio 8\\VC'
vcinc = vcdir + '\\include'
mfcinc = vcdir + '\\atlmfc' + '\\include'
platinc = vcdir + '\\PlatformSDK' + '\\include'
glinc = platinc + '\\gl'
framedir = 'C:\\Program Files\\Microsoft Visual Studio 8\\SDK\\v2.0'
frameinc = framedir + '\\include'
- 粉丝: 28
- 资源: 11
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
- 1
- 2
前往页