Я работаю над проектом на C++, который имеет некоторые исходные файлы с ручной кодировкой, а также некоторые исходные и заголовочные файлы, которые генерируются инструментом командной строки. Фактические исходные и заголовочные файлы сгенерированы содержимым файла JSON, которое инструмент считывает, и поэтому не может быть жестко закодирован в скрипт scons. Я хотел бы настроить scons так, чтобы, если я очистку проекта, то сделайте это, он будет знать, чтобы запустить инструмент командной строки, чтобы сгенерировать сгенерированные исходные и заголовочные файлы в качестве первого шага, а затем после этого скомпилировать мою руку закодированных файлов и сгенерированных исходных файлов и связывать их, чтобы сделать мой двоичный файл. Возможно ли это? Я не понимаю, как это сделать, поэтому любая помощь будет высоко оценена.Как настроить scons для создания проекта, который сгенерировал исходные файлы?
ответ
Да, это возможно. В зависимости от того, какой инструмент вы используете для создания файлов заголовка/источника, вы хотите проверить наш ToolIndex на https://bitbucket.org/scons/scons/wiki/ToolsIndex или прочитать наш справочник https://bitbucket.org/scons/scons/wiki/ToolsForFools для написания собственного Builder. На основе вашего описания вам, вероятно, придется написать собственный излучатель, который анализирует входной файл JSON и возвращает имена файлов, которые, в конечном итоге, будут получены в результате вызова. Тогда все, что вам нужно сделать, это:
# creates foo.h/cpp and bar.h/cpp
env.YourBuilder('input.json')
env.Program(Glob('*.cpp'))
Glob
найти созданные файлы, даже если они физически не существуют на жестком диске еще и добавить их в общие зависимости. Если у вас возникнут дополнительные вопросы или проблемы, пожалуйста, подумайте о подписке на наш список рассылки пользователей на [email protected] (см. Также http://scons.org/lists.html).
Там пример по адресу:
https://bitbucket.org/scons/scons/wiki/UsingCodeGenerators
Я также перекликаются предложение Дирка присоединиться к пользователям списка рассылки.
Благодаря Dirk Baechle я получил эту работу - для кого-то еще заинтересованного здесь код, который я использовал.
import subprocess
env = Environment(MSVC_USE_SCRIPT = "c:\\Program Files (x86)\\Microsoft Visual Studio 11.0\\VC\\bin\\vcvars32.bat")
def modify_targets(target, source, env):
#Call the code generator to generate the list of file names that will be generated.
subprocess.call(["d:/nk/temp/sconstest/codegenerator/CodeGenerator.exe", "-filelist"])
#Read the file name list and add a target for each file.
with open("GeneratedFileList.txt") as f:
content = f.readlines()
content = [x.strip('\n') for x in content]
for newTarget in content:
target.append(newTarget)
return target, source
bld = Builder(action = 'd:/nk/temp/sconstest/codegenerator/CodeGenerator.exe', emitter = modify_targets)
env.Append(BUILDERS = {'GenerateCode' : bld})
env.GenerateCode('input.txt')
# Main.exe depends on all the CPP files in the folder. Note that this
# will include the generated files, even though they may not currently
# exist in the folder.
env.Program('main.exe', Glob('*.cpp'))
- 1. Показать все исходные файлы проекта?
- 2. Scons: Как добавить цель для создания zip-файла, содержащего исходные файлы?
- 3. Rstudio организует исходные файлы проекта
- 4. Почему не удается найти исходные файлы моего проекта?
- 5. Настроить файлы проекта
- 6. Как настроить CMakeLists.txt для создания проекта на C++?
- 7. SCons не очищает все файлы
- 8. Как настроить Teamcity для создания проекта, который является плагином другого проекта?
- 9. Cmake: создавать исходные файлы YASM
- 10. Как настроить Raven для Android-проекта для создания пользовательских тегов?
- 11. Нужны ли исходные файлы, используемые для создания индекса в Lucene?
- 12. Как опубликовать исходные файлы проекта Java на GIT?
- 13. Как обрабатывать исходные файлы проекта в Maven плагин
- 14. Как настроить CruiseControl.NET для создания одного проекта на удаленном сервере
- 15. создавать исходные файлы латекса
- 16. Как включить исходные файлы одного проекта в другой проект?
- 17. Получить scons для создания нового номера сборки
- 18. SCons - целевой, который «удаляет» файл?
- 19. Какова переменная конструкции, используемая для создания библиотек в SCons?
- 20. Как пропатчить исходные файлы
- 21. Исходные файлы Android Studio не помечены как исходные файлы
- 22. Как автоматизировать исходные файлы C
- 23. Исходные папки для проекта maven в eclipse
- 24. Как IntelliJ может заархивировать исходные файлы проекта после создания файла jar?
- 25. Как настроить Jenkins для создания всех моих версий проекта?
- 26. Как настроить VS Код для создания Машинопись Определение Файлы
- 27. Doxygen скрыть исходные файлы
- 28. Как я могу построить maven проект, который он сгенерировал?
- 29. Как добавить исходные файлы в другую папку
- 30. Scons копировать файлы заголовков для сборки каталога
Это мой собственный инструмент, который генерирует исходные файлы. Я мог бы изменить его, чтобы вывести список файлов, которые он будет генерировать. Вы говорите, что я должен создать Emitter для YourBuilder, который вызывает мой инструмент, чтобы вернуть список выходных файлов, и тогда ваш пример будет работать правильно? –