scons 库文件生成和链接

一、编译库文件
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_study02> 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_study02>

如果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_study02> 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

原文地址:https://www.cnblogs.com/hanrp/p/11558080.html