一、編譯庫文件
1. 編譯庫文件 Library()
實例:
### hello.c 文件內容
int main()
{
printf("Hello, world!\n");
}
### goodbye.c 文件內容
int main()
{
printf("Good Bye!\n");
}
### SConstruct 文件內容
Library( "hello", ['hello.c', 'goodbye.c'] )
在cmd下編譯,可以發現會生成 hello.lib 這個庫文件。
PS C:\Users\Administrator\Desktop\scons_study\002> 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:\Users\Administrator\Desktop\scons_study\002>
如果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:\Users\Administrator\Desktop\scons_study\002> 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