����Linux�Ż�
Linux����

linux��ʹ��Scons�����Լ�����Ŀ����

����ʱ��:2017-03-02 11:52:59��Դ:linux��վ����:shitangdejiaozi
ԭ���򵥽�����һ����Ŀ�Զ�����Ĺ���cmake,�����������������c++�������Ƶģ��Ҹо�cmake�Ѿ��ܷ����ˣ���дMakefileҪ������ˣ�����ֿ���һ��scons��˲��о�scons�����氮����
 
scons���
SCons ��һ������Դ���롢�� Python ���Ա�д����һ���ij����칤�ߡ�������������� ScCons, ������ perl ���Ա�д�� Cons �����������ɣ����� 2000 �� 8 �»������ Software Carpentry �ٰ�� SC ��������Ĵ󽱡����� ScCons �Ѿ�������Ϊ SCons��Ŀ����Ϊ�˱�ʾ������ Software Carpentry ����ϵ����Ȼ������һ��Ŀ�ģ�����Ϊ�˸���������롣
 
ʹ��
�Ȱ�װ��
��򵥵ģ�
sudo apt-get install scons
��Ȼ��Ҳ����ȥ����ѹ�������Լ���װ��
 
һ��SConstruct �ļ�
����scons�������Ʊ�����ļ�������MakeFile,��һ��Python�ű���������scons��ʲô���������ϸ�Ĺ涨scons������µIJ��衣
 
����scons ����ѡ��
����scons
1��-c ���������㴴�����ļ�������make clean
2, -Q ����ʡ���Դ���һ�ѷϻ���ֻ��ʾ�������
 
����SConstrcut�ļ���д����
1.scons֧�ֵı�������
scons֧�ֵı���������
Program: ����ɿ�ִ�г���
Object :ֻ�����Ŀ���ļ���ʹ���������ͣ����������ֻ�����Ŀ���ļ���.o�ļ���
Library :����ɿ��ļ���sconsĬ�ϱ���Ŀ���ָ��̬���ӿ�
StaticLibrary :��ʽ�ı���ɾ�̬���ӿ⣬�������LibraryЧ��һ��
SharedLibrary :����ɶ�̬��
2.ָ��Ŀ����,�ұ������ļ�
Program('hello',['file.c','file2.c']),  //���ɿ�ִ���ļ�hello
3.����ʹ��Glob��������ƥ����ļ�
Program('hello',Glob('*.c')),
4.ʹ��Split���Կհ��ַ�Ϊ�ָ�������ַ����ָ
Program('hello',Split("main.c file1.c file2.c")),
5.�ļ��еĹؼ���
CCFLAGS ָ������ѡ��
LINKFLAGS ָ������ѡ��
CPPDEFINESָ��Ԥ������
LIBS ָ������Ҫ���ӵĿ��ļ�
LIBPATH ָ�����ļ���lib)������·��
CPPPATH ָ��[.h,.c,.cpp]���ļ�������·��
Program('hello',['hellosons.c','file.c'],
LIBS = 'pthread',
LIBPATH = ['/usr/lib','/usr/local/lib'],
CCFLAGS = ['-g ','-Wall'],
CPPPATH = ['/usr/include','hello/src'])
6.ʹ��Environments
һ��environment��һ��Ӱ�����ִ�е�ֵ�ļ��ϡ�
�ⲿ���� External Environment
�ⲿ����������Sconsʱ���û��Ļ������������ǿ���ͨ��os.environ��ȡ
6.1.��������
Construction Environment :������һЩ��������Щ������Ӱ��Scons����Ŀ�����Ϊ��
env = Environment()   //��������name,value������
for item in env.Dictionary():
print '(%s:%s)' %(item,env[item]) //�鿴����
env['cc']  //�鿴����
env.subst('$CC')  //�鿴���������subset����������ʱ�������
//�޸Ļ�������
env.Clone   //����һ����������
env.Replace  //�滻һ���Ѿ����ڵĻ�������
env.SetDefault  //Ϊһ��û�б�����ı�������Ĭ��ֵ
env.Append(CCFLAGS = '-g')  //Ϊһ���Ѵ��ڵĻ�����������һ��ֵ
env.AppendUnique  //Ϊһ��������������һ��Ψһ��ֵ
flags = {'CCFLAGS':'-option -O3 -O1'}
env.MergeFlags(flags)  //�ϲ���������
6.2.ִ�л���
Execution Environment:����Sconsִ���ⲿ����Թ���һ������Ŀ�ꡣ��Scons����һ��Ŀ���ļ�ʱ����˵ʹ�õ��ⲿ������ִ��Scons ʱ�Ļ��������Dz�ͬ�ġ�scons ʹ��$ENV���������д洢��Ŀ¼��Ϊ��ִ��������ⲿ��������
//�ڹ�����������ʾ��ʼ��PATH
path = ['usr/local/bin','/bin','/usr/bin']
env = Environment(ENV = {'PATH':path}) //ֻ������ENV
env['ENV']['PATH'] = ['usr/local/bin','/bin','/usr/bin']
//���ⲿ������ʼ��PATH
import os
env = Environment(ENV = {'path':os.environ['PATH']})
//ʹ��env.PrependENVPath ��env.AppendENVPath
env.PrependENVPath('PATH','/usr/local/bin') //���뵽'$PAHT'��һ��λ��
7.����Ŀ���ļ���·��
ʹ��Install:
test = env.Program('test.cpp')
env.Install('bin',test)  //���뵽binĿ¼
��ָ��Ŀ������ʱ��ָ����Ŀ¼
env.Program('bin/test','test.cpp')
//��Ŀ��ŵ�����Ŀ¼�£����޸�����
test = env.Program('test.cpp')
env.InstallAs('bin/testapp',test)   //ִ���ļ���Ϊtestapp
8.һ�ݴ��빹������汾��Target
һ��Դ�룬Ҫ��������debug�汾����Ҫ����release�汾
//��ҪΪ��ͬ�İ汾ָ����ͬ��obj���֣�������ͻ
opt = Environment(CCFLAGS ='-O2')
dbg = Environment(CCFLAGS = '-g')
o = opt.Object('foo-opt','foo.c')   //����foo-opt.o
opt.Program(o)
d = dbg.Object('foo-dbg','foo.c')  //����foo-dbg
dbg.Program(d)
��ֻ��һЩ�򵥽��ܣ��������ϤPython���Ϳ������������ı�д��Ҫ��Ч������ǰѧ��python�������ˡ�
9.�����ο�
����������ʵ���ҵ�SConstruct�ļ�����������򵥲ο�����Ҳ��ѧϰ��
#SConstuct file for Shelf
libs = Split("Ice IceUtil pthread boost_program_options boost_filesystem " +
"boost_regex boost_system pqxx log4cxx dl ENM"),
env = Environment(CCFLAGS = ["-g", "-Wall"],
LINKFLAGS = ["-rdynamic"],
CPPPATH = ["#src", "/usr/local/include/coral"],
LIBS = libs,
SLICEPATH = ["/usr/share/Ice-3.5.1/slice"])
#check library
from SCons.SConf import *
def check_flags():
e = Environment()
conf = Configure(e)
for lib in libs[0]:
if not conf.CheckLib(lib):
print "Can't find library ", lib, " exiting..."
Exit(1)
conf.Finish()
check_flags()
obj = env.Object(["src/ConfigLoader.cpp",
"src/Service.cpp",
"src/Template.cpp",
"src/Resource.cpp",
"src/Persistent.cpp",
"src/Plugin.cpp",
"src/Main.cpp"])
import os
def build_slice2cpp(target, source, env):
cmd = "slice2cpp"
for src in source:
cmd += " " + str(src)
tdir = str(source[0]).rpartition("/")[0]
if tdir:
cmd += " --output-dir " + tdir
if "SLICEPATH" in env:
for path in env["SLICEPATH"]:
cmd += " -I" + path
return os.system(cmd)
builder = Builder(action = build_slice2cpp, src_suffix = ".ice")
env.Append(BUILDERS = {"Slice": builder})
env.Slice(["src/Shelf.h", "src/Shelf.cpp"], "src/Shelf")
ice_obj = env.Object("src/Shelf.cpp")
env.Program("slf", [obj, ice_obj])
Export('env')
SConscript('src/plugins/SConscript')
Export('ice_obj')
SConscript('src/tests/SConscript')
 
�������ø��µ�ַ��//m.ajphoenix.com/linux/28839.html