【问题标题】:Scons -u option doesn't work?Scons -u 选项不起作用?
【发布时间】:2015-08-24 03:09:19
【问题描述】:

似乎 -u 对我不起作用(我使用的是 scons-2.3.6)。

为了简化上下文,你可以想象我的项目结构,

+root
    +project
        - bar.vcxproj (generated vs project)
    -SConstruct
    -bar.c

在 SConstruct 中,我写了如下代码:

env_base = Environment()
...
env_base.StaticLibrary(target = 'bar', source = ['bar.c'])
...

如果我在 root 文件夹中执行命令“scons”,一切正常。

但是如果我在 project 文件夹中执行命令“scons -u”,scons 可以在根文件夹中找到我的 SConstruct,但没有文件被编译。

BTW : 我之所以在 project 文件夹中执行 "scons -u" 是因为我想将生成的 vsproj 放在 projet 文件夹中并使用 BuildCommandLine 进行编译项目。

我想我没有正确使用“-u”,对于我的情况,什么是优雅的解决方案?

第一次编辑:

正如 bdbaddog 所问,我已将 SConstruct 放在这里:

def BuildConfig(env, config):
    env.Append(CCFLAGS = '/W 4')
    env.Append(CCFLAGS = '/WX')

    if config == "debug":
        env.Append(CCFLAGS = '/DEBUG')
        #env.Append(CCFLAGS = '-Zi /Fd${TARGET}.pdb')
        env.Append(CCFLAGS = '/Z7')
    elif config == "release":
        pass

env_base = Environment()
lib = env_base.StaticLibrary(target = 'bar', source = ['bar.c'])

opts=Variables()
opts.Add('target', 'Compile Target (debug/release).', "debug")
# there is more in my project....
opts.Update(env_base) # update environment

# here I want to use my own command to build the project, so it can support different build option that is defined by me.
env_base['MSVSBUILDCOM'] = "scons -u target=$(Configuration)"

target = env_base["target"]
BuildConfig(env_base, env_base['target'])

env_base.MSVSProject(target = "project\\bar" + env_base['MSVSPROJECTSUFFIX'],
            srcs = ["..\\bar.c"],
            incs = [],
            localincs = "",
            resources = "",
            misc = "",
            buildtarget = lib,
            variant = ['debug'],
            auto_build_solution=0)

【问题讨论】:

  • 我不明白你的 BTW .. 你想做什么?你能在你的 SConstruct 中粘贴生成 vsproj 的逻辑吗?
  • @bdbaddog 我已经发布了可以重现我的问题的 SConstruct。
  • 你真的要从 scons 内部调用 scons 吗?如果是这样,您最好确保更改第二次调用的 sconsignfile 名称.. env_base['MSVSBUILDCOM'] = "scons -u target=$(Configuration)"
  • 您不必在 SCons 中使用反斜杠作为目录分隔符。它将在每个平台上使用正确的目录分隔符,您可以只使用正斜杠“/”
  • SConstruct上面的目录中是否存在bar.c?

标签: scons build-system


【解决方案1】:

SCons 默认只构建当前目录下的文件。

如果您只想在某个目录中构建文件(有规则可以在那里构建目标),您可以按如下方式调用 SCons:

scons the_target_directory_I_want_to_build

虽然这可能会导致该目录中目标的源也被构建。

【讨论】:

  • 我绑定了“scons C:\root”并收到此错误:scons: *** No SConstruct file found。文件“C:\Python27\scons-2.3.6\SCons\Script\Main.py”,第 920 行,在 _main
  • 尝试:scons -u c:\root
猜你喜欢
  • 1970-01-01
  • 2016-11-13
  • 2012-05-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-29
  • 2015-06-25
  • 2013-12-22
相关资源
最近更新 更多