Использование scons для проверки - PullRequest
1 голос
/ 30 ноября 2009

Моя компания переключается с make на scons. Частью нашего процесса make является вызов xmllint для ряда файлов xml для проверки их соответствия схеме.

В моем SConstruct есть следующее:

import os;
Env = DefaultEnvironment()
pwd = Dir('.').path
xmlValidator = Builder(action = 'xmllint --noout  --schema '+pwd+'/path/schema.xsd '+pwd+'file.xml')
Env.Append(BUILDERS = {'ValidateXML' : xmlValidator})
Env.ValidateXML()

Когда я бегу:

scons -Q

Я получаю:

scons: `.' is up to date.

Но проверка не выполняется.

Что я делаю не так?

Я совершенно новичок в scons и немного знаком с Python.

1 Ответ

2 голосов
/ 01 декабря 2009

Вам необходимо предоставить входные файлы для scons. В настоящее время у вас есть исходный файл, жестко запрограммированный в «рецепте» компоновщика. Лучше использовать заполнитель SOURCE в строке действия и затем указать входной файл при вызове компоновщика.

xmlValidator = Builder(action='xmllint --noout --schema '+
                               pwd+'/path/schema.xsd $SOURCE')
Env.Append(BUILDERS = {'ValidateXML' : xmlValidator})
Env.ValidateXML(source='file.xml')

Это всегда будет запускать проверку, поэтому вы можете захотеть, чтобы она выводила результат в файл. Для этого вы должны использовать заполнитель TARGET, например:

xmlValidator = Builder(action='xmllint --schema '+
                       pwd+'/path/schema.xsd $SOURCE --output $TARGET')
Env.ValidateXML(source='file.xml', target="out.txt")
...