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