背景

我正在通过设置具有两个子项目的基本C++示例项目来尝试Scons:

  • Prj1是一个依赖于Prj2的EXE
  • Prj2是一个DLL,可导出一些函数

  • 您可以看到目录结构以及我的SConstruct和SConscript文件here的内容

    问题

    我遇到的问题是,要从命令行构建这些目标,我必须既指定其构建目录的相对路径,又指定其平台特定的文件扩展名。

    例如,要构建Prj1,我必须执行以下操作:
    
    build> scons ../bin/project1.exe
    

    同样,要构建Prj2,我必须执行以下操作:
    
    build> scons ../bin/project2.dll
    



    如何使SCons在不指定相对路径和特定于平台的文件扩展名的情况下构建这些项目?

    所需的:
    
    build> scons project1
    build> scons project2
    

    潜在解决方案
  • 使用别名-我很确定这个是我想要的,但我显然搞砸了。我尝试了以下失败的尝试:
  • 
    prj1_env.Alias( 'project1', PROG)
    prj1_env.Alias( 'project1', os.path.join( BIN_DIR, PROG) )
    

    引用文献
  • How do I get projects to place their build output into the same directory with Scons?
  • 最佳答案

    将其移至答案而不是评论。 :)

    引用

  • Howdo I get projects to place theirbuild output into the same directorywith Scons?

  • Alias需要一个实际目标作为第二个参数。我认为问题在于“project1”(PROG的值)不是实际目标。以下是纠正此问题的简便方法。
    使PrefixProgram返回一个值:
    def PrefixProgram(env, outdir, trgt, srcs):
        return env.Program(target = os.path.join(outdir, trgt), source = srcs)
    

    然后:
    target = PrefixProgram( prj1_env, BIN_DIR, PROG, SOURCES )
    prj1_env.Alias("project1", target)
    

    您当然可以这样做:
    prj1_env.Alias("project1", PrefixProgram( prj1_env, BIN_DIR, PROG, SOURCES ))
    

    但是我认为第一种方法更容易理解。

    我希望这有帮助。

    关于c++ - 如何在Scons中为具有相对路径的构建目标创建别名?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/282419/

    10-13 05:44