Как создать псевдоним для цели сборки с относительным путем в Scons? - PullRequest
3 голосов
/ 12 ноября 2008

Фон

Я опробую Scons, настроив базовый пример проекта C ++ с двумя подпроектами:

  • Prj1 - это EXE, который зависит от Prj2
  • 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) )

Ссылки

1 Ответ

3 голосов
/ 12 ноября 2008

Перемещение это к ответу вместо комментария. :)

Ссылки

Псевдониму нужна фактическая цель в качестве второго аргумента. Я думаю, что проблема в том, что «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 ))

Но я думаю, что первый способ легче понять.

Надеюсь, это поможет.

...