一、编译库文件
1. 编译库文件 Library()
实例:
### hello.c 文件内容
int main()
{
printf("Hello, world!
");
}
### goodbye.c 文件内容
int main()
{
printf("Good Bye!
");
}
### SConstruct 文件内容
Library( "hello", ['hello.c', 'goodbye.c'] )
在cmd下编译,可以发现会生成 hello.lib 这个库文件。
PS C:UsersAdministratorDesktopscons_study 02> scons -Q
cl /Fogoodbye.obj /c goodbye.c /nologo
goodbye.c
cl /Fohello.obj /c hello.c /nologo
hello.c
lib /nologo /OUT:hello.lib hello.obj goodbye.obj
PS C:UsersAdministratorDesktopscons_study 02>
如果Library 不定义名字,则会使用第一个源文件的名字命名。
2. 使用源代码或者目标文件编译库文件
Library中的参数可以是 源文件,也可以时 .o 的中间文件。
### SConstruct 文件内容
Library( "hello", ['hello.c', 'goodbye.o'] )
3. 编译静态库 StaticLibrary()
Library() 默认是编译静态库的,当然也可以使用StaticLibrary() 来定义编译静态库
### SConstruct 文件内容
StaticLibrary( "hello2", ['hello.c', 'goodbye.c'] )
4. 编译动态库 SharedLibrary()
如果想编译动态库(在POSIX系统里)或DLL文件(Windows系统),可以使用SharedLibrary
### SConstruct 文件内容
SharedLibrary( "hello2", ['hello.c', 'goodbye.c'] )
如下为执行结果: 生成 hello2.dll 文件
PS C:UsersAdministratorDesktopscons_study 02> scons -Q
link /nologo /dll /out:hello2.dll /implib:hello2.lib hello.obj goodbye.obj
二、链接库文件
## 生成一个名为 foo.lib 的库文件
Library('foo', ['f1.c', 'f2.c', 'f3.c'])
## 编译prog.c 文件,指定库文件为 foo.lib 和 bar.lib, 在当前文件夹中寻找
Program('prog.c', LIBS=['foo', 'bar'], LIBPATH='.')
$LIBPATH 用于指定库文件的目录:
## linux:
Program('prog.c', LIBS=['foo', 'bar'], LIBPATH=['/usr/lib', '/usr/local/lib'])
## POSIX
Program('prog.c', LIBS=['foo', 'bar'], LIBPATH='/usr/lib:/usr/local/lib')
## Windows
Program('prog.c', LIBS=['foo', 'bar'], LIBPATH='C:\lib;D:\lib')
————————————————
版权声明:本文为CSDN博主「Jaimex8」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Ciellee/article/details/87905918