【发布时间】:2016-10-14 06:28:24
【问题描述】:
我建立我的共享库:
env.SharedLibrary(target,Split(sources))
文档说 “在 Windows 系统上,SharedLibrary 构建器方法将始终在共享 (.dll) 库之外构建一个导入 (.lib) 库,添加一个具有相同基本名称的 .lib 库”。没错,但我需要另一个目录,所以我的问题是:
是否可以为导入库设置另一个目标目录? 我想要不同目录中的 .dll 和 .lib:
bin/target.dll
lib/target.lib
在 VS 项目中可以这样做,但我也需要为 Scons 做出决定。 谢谢。
更新: 我们有以下结构
/project
/bin
/lib
/include
/source
SConstruct
/library
lib.cpp
SConscript
/app
SConscript
main.cpp
应用依赖于库。
以下脚本非常简化。
SConstruct
g_env = Environment()
...
g_target = 'Library_' + g_arch
if g_debug: g_target += 'd'
SConscript('library/SConscript')
SConscript('app/SConscript')
图书馆/SConscript
sources = [ .. ]
env_lib = g_env.Clone()
...
env_lib.SharedLibrary('#../lib/' + g_target,sources)
应用程序/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)。
【问题讨论】:
-
如果通过 VS 项目执行此操作,它会做什么?是否为链接器指定了不同的命令行选项?还是 VS 在生成文件后复制/移动生成的文件?
-
@bdbaddog 我尝试像 VS 一样添加命令行选项 /imlib:path/lib/Library.lib。但是 SCons 重写了这个选项——在输出中我看到了我的选项和下一个 Scons 的选项,带有默认目标目录——/implib:/path/bin/Library.lib
-
您是如何尝试将其添加到命令行的?
-
@bdbaddog
env.Append(LINKFLAGS = '/implib:/path/bin/Library.lib')在构建库之前env.SharedLibrary()