c++ - 如何在 Scons 中为具有相对路径的构建目标创建别名?

标签 c++ build scons

背景

我正在通过设置一个包含两个子项目的基本 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) )

引用资料

最佳答案

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

引用资料

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/

相关文章:

Android - 多个应用程序的相同核心功能

c - 设置 env 后 scons 仍然失败

c++ - 为什么 cin.getline 会分配给字符数组,但使用 '=' 却不会?

c++ - 通过 (Args&&...) 构造一个 std::thread

c++ - 无法将变量 't' 声明为抽象类型 'AddSalariedEmployee'

android - 如何在本地构建从 .git 存储库获取的 ionic 应用程序

python - scons:在 scons 之前运行一些脚本

c++ - 构建 .proto 并移动 .h

c++ - 在具有大型代码库的 Eclipse IDE 中搜索函数或文本

c++ - 计算文件的熵