from http://andylin02./blog/894908 在上两篇文章中已经简单介绍了用scons编译库文件,可执行程序的方法,本篇中将主要介绍scons的其他一些常用参数以及变量。 scons不带参数执行的时候会执行编译动作,对于内容改变过的源文件它会自动重新编译,scons对文件状态的改变靠的是内容的md5而不是时间戳,这是scons和makefile不同的一点。它对文件信息和状态的记录保存在当前目录下的.sconsign.dblite文件中。 scons最常用的参数有两个,-c和-Q。 scons -c可以清除生成的临时文件和目标文件,相当于执行make clean。 scons -Q将产生更少的输出信息。 在编译和链接的过程中经常会附加一些参数,例如定义头文件包含路径,链接库的路径或者宏定义等,这些参数当然都是可以定制的,常用的变量有如下一些: LIBS:指定链接的库文件,比如要链接 libpthread.so,则写为 LIBS=['pthread'] LIBPATH:库文件搜索路径,例如 LIBPATH=['/usr/local/lib/','.'] CPPPATH:include文件包含路径,例如CPPPATH = ['/home/project/inc'] CPPDEFINES:宏定义,例如CPPDEFINES=’DEBUG’ CC:编译器,默认情况下scons会根据源文件后缀自动判断。 CFLAGS:编译参数,例如CFLAGS = ‘-g -W’ LDFLAG:链接参数,例如LDFLAG = ‘-g’ 可以看到,上述变量的值可以为字符串’-g’。当指定多个值时候,采用Python中的list类型。 这些变量的使用地点很灵活,一般可以在两个地方使用。 第一种,直接使用在Program,Library等指令中,例如 Program("demo","main.c",CC='gcc',CFLAGS=['-g','-W'],CPPDEFINES=['DEBUG','OK'],CPPPATH='/usr/local/include',LIBS=["demo"],LIBPATH=["."]); 执行scons -Q后的输出如下 [leconte@localhost demolib]$ scons -Q gcc -o a.os -c -fPIC a.c gcc -o b.os -c -fPIC b.c gcc -o main.o -c -g -W -DDEBUG -DOK -I/usr/local/include main.c gcc -o libdemo.so -shared a.os b.os gcc -o demo main.o -L. -ldemo 可以看到我们定义的宏都起作用了。 另外一种方式,也是实际项目中会用到的方法,则是预先用Environment设置编译环境 env = Environment(CC = 'gcc', CFLAGS = ['-g','-W'], CPPDEFINES=['DEBUG','OK'],CPPPATH='/usr/local/include',LIBS=["demo"], LIBPATH=["."]) env.Program("demo","main.c") 这种方式将环境和动作分开,更有条理一些。 |
|
来自: 心不留意外尘 > 《compile build》