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 後即可編譯出對應的可執行程序 

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