题
背景
我正在通过设置一个基本的 C++ 示例项目来尝试 Scons,该项目有两个子项目:
- Prj1 是一个依赖于 Prj2 的 EXE
- Prj2是一个导出一些函数的DLL
您可以看到我的 SConstruct 和 SConscript 文件的目录结构和内容 这里
问题
我遇到的问题是,为了从命令行构建这些目标,我必须指定其构建目录的相对路径及其平台特定的文件扩展名。
例如,要构建 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) )
参考
解决方案
将其移至答案而不是评论。:)
参考
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 ))
但我认为第一种方式更容易理解。
我希望这有帮助。
不隶属于 StackOverflow