我构建了我的共享库:
env.SharedLibrary(target,Split(sources))
文件说 "在Windows系统上,除了共享(.dll)库之外,SharedLibrary构建器方法将始终构建一个导入(.lib)库,添加一个具有相同基本名称的.lib库"。这是对的,但我需要另一个目录,所以我的问题:
是否可以为导入库设置另一个目标目录? 我想在不同的目录中使用.dll和.lib:
bin/target.dll
lib/target.lib
可以在VS项目中完成,但我还需要Scons的决定。 感谢。
UPD: 我们有以下结构
/project
/bin
/lib
/include
/source
SConstruct
/library
lib.cpp
SConscript
/app
SConscript
main.cpp
app取决于图书馆 以下脚本非常简化 SConstruct
g_env = Environment()
...
g_target = 'Library_' + g_arch
if g_debug: g_target += 'd'
SConscript('library/SConscript')
SConscript('app/SConscript')
library / SConscript
sources = [ .. ]
env_lib = g_env.Clone()
...
env_lib.SharedLibrary('#../lib/' + g_target,sources)
app / SConscript
sources = [ .. ]
app_env = g_env.Clone()
app_env.Append(LIBPATH = Split('#../lib'))
app_env.Append(LIBS = Split(g_target))
app_env.Program('app',sources)
如果我去app
目录并运行
scons -u
我得到了我所需要的一切:
lib/Library.dll
lib/Library.lib
source/app/app.exe
但是,如果我只想重建图书馆运行
scons -u
来自library
目录 - 只是构建我的.obj文件,没有最终的共享库
我不知道它为什么会这样,我对它不太熟悉。但是现在我们需要在不同的目录中获取最终库(lib中的.lib,bin中的.dll),如上所述。
答案 0 :(得分:0)
执行此操作的标准方法是使用Install()
方法(请参阅第11章“在我们here的其他目录中安装文件”):
Install('lib','bin/target.lib')
答案 1 :(得分:0)
您应该在对SharedLibrary()
的调用中设置no_import_libenv_lib.SharedLibrary('#../lib/' + g_target,sources,no_import_lib=True)
另外,您输出的是.exp文件吗?
答案 2 :(得分:0)
只需在目标文件列表中列出库的名称。
env.SharedLibrary([target, 'lib/anyname.lib'], Split(sources))
SCons将根据后缀(LIBSUFFIX
)识别目标.lib文件,并将自动调整链接程序的/IMPLIB
自变量。