使用scons构建编译环境

scons是非常好的build系统,可以用来代替Makefile,支持cpp和java

 

首先安装scons1.2,ubuntu自带的是0.97,如果最好synaptic里删掉

 

scons的文档很丰富,编译文件本身就是python,因此有很多很神奇的用法

这边只介绍基本的用法

 

假设你的code和编译的文件是分开的,比如src和build

假设你的include文件都是从某个root开始找,类似于 #include "lib1/lib1.h",而不是相对路径

基于以上个人认为的好习惯,开始设计SConstruct的结构吧

 

 

 

 

|-- SConstruct
|-- src
|   |-- SConscript
|   |-- app1
|   |   |-- SConscript
|   |   |-- app1.cc
|   |-- lib1
|   |   |-- SConscript
|   |   |-- lib1.cc
|   |   |-- lib1.h
|   `-- lib2
|       |-- SConscript
|       |-- lib2.cc
|       |-- lib2.h

= SConstruct =

VariantDir('build', 'src', duplicate=0)
SConscript('build/SConscript')

 

= src/SConscript =

SConscript([
        'lib1/SConscript',
        'lib2/SConscript',
        'app1/SConscript'
])

 

= src/lib1/SConscript =

env = Environment()
env.Library('lib1', 'lib1.cc', CPPPATH = ['#src'])

 

= src/lib1/lib1.h =

#ifndef LIB1_LIB1_H
#define LIB1_LIB1_H

int add1(int x, int y);

#endif

 

= src/lib1/lib1.cc =

#include "lib1/lib1.h"

int add1(int x, int y) {
  return x + y + 1;
}

 

= src/lib2/SConscript =

env = Environment()
env.Library('lib2', 'lib2.cc', CPPPATH = ['#src'])

 

= src/lib2/lib2.h =

#ifndef LIB2_LIB2_H
#define LIB2_LIB2_H

int add1(int x, int y);

#endif

 

= src/lib2/lib2.cc =

#include "lib2/lib2.h"

int add1(int x, int y) {
  return x + y + 1;
}

 

= src/app1/SConscript =

#include <iostream>
#include "lib2/lib2.h"
#include "lib2/lib2.h"

using namespace std;

int main() {
  cout << add1(1, 2) << endl;
  cout << add2(1, 2) << endl;
  return 0;
}

 

 

好,到根目录下

$ scons

$ scons -c 为清空

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值