SCons: получить абсолютный путь к исходному файлу (как будто я не устанавливал variant_dir)

#scons

#scons

Вопрос:

Я могу использовать File('foo.bar').abspath для получения местоположения файла, но если у меня установлен variant_dir, то возвращаемый путь будет в variant_dir, а не в исходном местоположении. Если я duplicate=0 установил, то возвращаемый файл фактически не будет существовать.

Очевидно, что SCons знает, где находится исходный файл, поскольку он передается в качестве аргумента при фактической сборке файла (например gcc -c -o variant/foo.o orig/foo.c ).

Есть ли какой-то File('foo.bar').origpath способ, который я могу использовать?

Если бы дошло до этого, я мог бы использовать os.path.join(Dir('#').abspath, 'orig') но для этого SConscript должен знать, в каком каталоге он находится, что является беспорядочным.

Ответ №1:

Вы можете использовать srcnode() . Чтобы процитировать справочную страницу:

Метод srcnode() возвращает другой объект File или Dir, представляющий исходный путь к данному файлу или каталогу.

Это даст вам абсолютный путь в исходном каталоге:

 File('foo.bar').srcnode().abspath
  

Комментарии:

1. Ах, красиво! Я знал, что должно быть что-то подобное. Спасибо!