我正在通过设置一个包含两个子项目的基本C ++示例项目来尝试Scons:
您可以看到我的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) )
答案 0 :(得分:3)
将此移至答案而非评论。 :)
<强>参考强>
别名需要一个实际目标作为其第二个参数。我认为问题是“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 ))
但我认为第一种方式更容易理解。
我希望这会有所帮助。