scons入门

scons是一个Python写的自动化构建工具,可以用来编译代码,和make作用相似

1、安装python
sudo apt-get install python3
sudo apt-get install python3-pip
2、更改python软连接,将python3配置为python默认版本
   cd /usr/bin
   sudo rm python
   sudo ln -s python3 python
   执行完后通过python -V确认链接的是python3
3、更新pip程序
   pip3 install pip
   安装完成后通过pip3 -V查看版本
4、安装scons
   sudo python -m pip install scons 
   安装完成后通过scons -v查看版本
5、编译一个简单的hello world程序

int main(int argc, char **argv)
{
    printf("hello world!\n");
    return 0;
}

在工程目录下建立一个SConstruct文本文件

import os
#获取当前目录下的所有.c文件,保存在src变量中
src = Glob('*.c')
#获取环境变量
env = Environment()  
env.Append(CCCOMSTR="CC $SOURCES")
env.Append(LINKCOMSTR="LINK $TARGET")

#将.c编译成.o文件
objs = env.Object(src)
#编译出可执行程序,程序的目标是proj_test
env.Program(target = 'proj_test',source=objs)

6、打开终端,切换到工程目录下
执行scons 
执行后会编译出proj_test可执行程序
指向scons -c 可以清除编译出来的文件,相当于make clean
7、多目录源文件编译
test
  |-- main.c
  |-- SConstruct
  | model(目录)
      |-- common_utils.h
      |-- common_utils.c
      |-- SConscript
 

main.c 

#include <stdio.h>
#include <string.h>
#include "model/common_utils.h"
int main(int argc, char **argv)
{
    int ret = utils_atoi("10086");
    printf(">>>>>> ret = %d\n",ret);
    return 0;
}

SConstruct

import os

#获取环境变量
env = Environment()  
env.Append(CCCOMSTR="CC $SOURCES")
env.Append(LINKCOMSTR="LINK $TARGET")

#获取当前目录下的所有.c文件
src = Glob('*.c')
#将model 目录下的.c添加进来,其实是执行SConscript
src += SConscript(os.path.join('model', 'SConscript'),variant_dir='build/model', duplicate=0)
#将.c编译成.o文件
objs = env.Object(src)
#编译出可执行程序,程序的目标是proj_test
env.Program(target = 'proj_test',source=objs)

common_utils.h

int utils_atoi(const char* str);

common_utils.c

#include "common_utils.h"

int utils_atoi(const char* str)
 {
     int ret = 0;
     const char* temp = str;
     char is_negative = 0;
     if(*temp=='-')
     {
         is_negative = 1;
         temp++;
     }
     else if(*temp=='+')
     {
         temp++;
     }
     while(*temp>='0'&&*temp<='9')
     {
         ret =ret*10+(*temp-'0');
         temp++;
     }
     return is_negative?-ret:ret;
 }

SConscript

import os

#获取环境变量
env = Environment() 
include_dirs = []
defines = []

env.Append(CPPPATH = include_dirs)
env.Append(CPPDEFINES = defines)

#获取当前目录下的所有.c文件
src = Glob('*.c')
Return('src')

执行scons 后即可编译出对应的可执行程序 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章