[SCons 有点翻译的scons学习] 1. 简单编译

本文介绍如何使用SCons进行自动化编译。包括安装SCons的方法、编写最简单的SConstruct文件实现hello world程序的编译,以及如何生成目标文件、清理临时文件等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

安装scons

=====

这个就不详细说了,嫌麻烦可以直接sudo apt-get install scons。不嫌麻烦去下载源码安装。


简单编译

=====

来看一个最简单的hello, world程序
int
main()
{
    printf("Hello, world!\n");
}
然后创建一个SConstruct文件,编写
Program('hello.c')

这个最简单的自动化编译文件有两条信息。第一指出了需要编译的结果是一个可执行文件,第二指出了输入文件是
hello.c。
这时在命令行终端运行scons,就能自动编译了。
      % scons
      scons: Reading SConscript files ...
      scons: done reading SConscript files.
      scons: Building targets ...
      cc -o hello.o -c hello.c
      cc -o hello hello.o
      scons: done building targets.
scons只需要知道输入文件的名字,就能自动推导出依赖文件,并且自动找到编译器,这里是gcc。

 

Building Object Files

=====

除了可以指定输出是可执行文件,还可以指定输出是.o 文件。
      Object('hello.c')
输出
      % scons
      scons: Reading SConscript files ...
      scons: done reading SConscript files.
      scons: Building targets ...
      cc -o hello.o -c hello.c
      scons: done building targets.   

清理工作

=====

当编译完输出可执行文件之后,剩下的.o 文件就多余了,这时可以加个 option -c,来执行清理工作。
      % scons
      scons: Reading SConscript files ...
      scons: done reading SConscript files.
      scons: Building targets ...
      cc -o hello.o -c hello.c
      cc -o hello hello.o
      scons: done building targets.
      % scons -c
      scons: Reading SConscript files ...
      scons: done reading SConscript files.
      scons: Cleaning targets ...
      Removed hello.o
      Removed hello
      scons: done cleaning targets.      

SConstruct文件

=====

和make 工具类似,Scons 是根据SConstruct 文件来组织编译的,但有一点不同,SConstruct使用的是python的语法,这点比起makefile来就爽多了。

如果觉得scons在编译的时候输出了太多信息,眼花缭乱,那么加个 -Q,这样scons: 开头的条目就被隐藏不予显示了。
      C:\>scons -Q
      cl /Fohello.obj /c hello.c /nologo
      link /nologo /OUT:hello.exe hello.obj
      embedManifestExeCheck(target, source, env)

ilding Object Files


转载于:https://www.cnblogs.com/lyyyuna/archive/2013/03/29/4123922.html

<think>好的,我现在要解决用户在Bash环境下执行scons命令时出现的“command not found”问题。首先,我需要理解这个问题的可能原因,然后一步步寻找解决方案。 用户提到是在Bash环境下遇到这个问题,所以首先应该考虑scons是否已经安装在系统中。常见的导致命令找不到的原因包括软件未安装、安装路径不在环境变量PATH中,或者存在拼写错误。 首先,我应该检查scons是否安装。在Linux或BSD系统中,可以使用包管理器来安装软件。例如,在基于Debian的系统上,可以使用apt-get;在Red Hat系统上,使用yum或dnf;而在BSD系统中,可能使用pkg。如果用户之前引用中提到从Linux转到BSD,可能需要确认他们当前使用的系统类型,因为安装方法会有所不同。 根据引用[1],用户之前使用的是csh,但现在在Bash环境下,可能系统环境不同。用户可能在BSD系统上,但尝试使用Bash,这时候需要确认scons是否已安装,或者是否需要通过ports或pkg来安装。 另外,用户之前的问题中提到了关于Python静态库的配置(引用[3]),这可能与scons的依赖有关,因为scons是一个基于Python的构建工具。需要确保Python正确安装,并且scons的依赖项满足。 可能的解决步骤包括: 1. 检查scons是否安装:尝试运行`scons --version`,如果找不到命令,说明未安装。 2. 使用包管理器安装scons:比如在Debian/Ubuntu上使用`sudo apt-get install scons`,在FreeBSD上使用`pkg install scons`。 3. 如果包管理器中没有scons,可能需要通过Python的pip安装:`pip install scons`。 4. 确保安装路径在PATH环境变量中,特别是如果通过pip安装到用户目录下,可能需要将`~/.local/bin`添加到PATH中。 5. 验证Python环境是否正确,特别是如果用户之前修改过Python的库路径(如引用[3]中的情况),可能需要检查Python的安装是否完整,是否影响了scons的运行。 6. 如果用户是从源代码安装,可能需要手动构建并安装scons。 此外,用户提供的引用[4]涉及sudoers文件的配置,虽然与当前问题无直接关联,但如果在安装过程中需要sudo权限,可能需要正确配置sudo,但根据问题描述,这可能是次要的。 还需要考虑用户是否有权限安装软件,或者是否在虚拟环境中导致PATH不同。例如,如果用户使用虚拟环境,可能需要激活环境后再安装scons,或者全局安装。 总结下来,解决步骤可能是: - 确认系统类型(Linux还是BSD)。 - 使用对应的包管理器安装scons。 - 检查PATH环境变量。 - 通过pip安装作为备选方案。 - 验证Python环境是否正常。 在回答时,需要结构清晰,分步骤说明,并考虑到用户可能的系统环境差异,同时引用之前的相关引用内容,如提到BSD环境下可能使用pkg安装,以及Python配置的影响。</think>#### 逐步解决方案:Bash环境下`scons`命令未找到的解决方法 --- ### 一、问题根源分析 1. **未安装scons**:最常见原因是系统中未安装该构建工具[^1]。 2. **安装路径未加入PATH**:通过非标准方式安装可能导致路径缺失(如Python虚拟环境或手动编译安装)。 3. **Python环境异常**:scons依赖Python运行环境,Python配置错误会导致命令失效[^3]。 --- ### 二、具体解决步骤 #### 步骤1:验证基础安装状态 在终端执行以下命令,确认scons是否已安装: ```bash which scons || echo "scons未安装" ``` - 若输出路径(如`/usr/local/bin/scons`),跳转**步骤3** - 若提示未安装,继续下一步 --- #### 步骤2:通过系统包管理器安装 根据操作系统类型选择安装方式: | 系统类型 | 安装命令 | 备注 | |------------------|----------------------------|-------------------------------| | Debian/Ubuntu | `sudo apt install scons` | 适用于大多数Linux发行版 | | RHEL/CentOS | `sudo yum install scons` | EPEL仓库需已启用 | | FreeBSD | `sudo pkg install scons` | 需root权限[^1] | | macOS (Homebrew) | `brew install scons` | 需提前安装Homebrew | --- #### 步骤3:通过Python pip安装(备用方案) 若系统仓库无scons包,可使用Python包管理器安装: ```bash # 全局安装 pip install scons # 用户级安装(无需root) pip install --user scons ``` 安装后需将Python用户二进制目录加入PATH: ```bash echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc source ~/.bashrc ``` --- #### 步骤4:检查Python环境配置 若出现类似`ImportError`的Python报错,需排查Python库路径(参考引用[3]): 1. 确认Python版本匹配: ```bash python --version ``` 2. 检查`scons`是否绑定到正确Python版本: ```bash head -n1 $(which scons) ``` 输出应为`#!/usr/bin/python3`或类似有效路径 --- #### 步骤5:手动编译安装(极端情况) ```bash wget https://sourceforge.net/projects/scons/files/scons/4.3.0/scons-4.3.0.tar.gz tar xvf scons-4.3.0.tar.gz cd scons-4.3.0 python setup.py install ``` --- ### 三、验证安装 执行版本检查命令: ```bash scons --version ``` 正常输出应显示版本信息,例如: ``` SCons v4.3.0 ``` --- ### 四、典型问题排查 | 现象 | 解决方案 | |----------------------|--------------------------| | 权限不足 | 使用`sudo`或`pip --user` | | Python路径错误 | 调整`PYTHONPATH`环境变量 | | 多版本Python冲突 | 使用`python3 -m pip install scons` | ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值