Как управлять импортом проекта SCons - PullRequest
0 голосов
/ 04 августа 2020

У меня есть проект на основе SCons, в котором есть довольно специализированный файл SConstruct (из-за CUDA), назовем его проектом A. Я использую его как подмодуль для другого проекта, над которым я работаю, мы можем назвать проект B, который является также будут иметь некоторые довольно специфические требования к компиляции (из-за MEX).

Я бы хотел оставить проект A практически нетронутым, так как это обычная библиотека в моей группе. Как мне заставить проект B получить все include, библиотеки и т. Д. c. информация, которая нужна ему для "компиляции". В CMake это будет просто комбинация add_subdirectory() и target_link_libraries(). Есть ли в SCon эквивалентная концепция или SConstruct является более автономным (не может быть вызван другим SConstruct)?

1 Ответ

0 голосов
/ 06 августа 2020

( это было слишком долго для комментария, не уверен, что это «ответ» ... )

SConstructs - уникальные вещи верхнего уровня, но, опять же, они также не являются 't - вы можете вызвать любой файл, когда вы вызываете SConscript(), включая файл с именем subdir/SConstruct, если последний структурирован таким образом, что имеет смысл, и имеет A Export() вещи, которые проектируют, что вызвали его были бы заинтересованы в Import() ing.

Там также ничего не мешает вам написать действительно минимальную SConstruct для A, которая выполняет только вещи, которые могут быть уникальными для создания автономного A, и все реальная (обычная) работа выполняется SConscript, который вызывает SConstruct A, но который также может вызывать SConstruct B.

Или вы можете добавить шаг к A, который записывает всю информацию о переменных, которая, по вашему мнению, нужна проекту B. в файл, скажем, exports.py в форме операторов присваивания, и пусть B прочитает это с помощью вызова Variables(files="exports.py") - это немного похоже на выполнение Export и Import, но через границу вызовов scons. Если файл не существует, предположим, что вам нужно вызвать scons для запуска сборки A, поэтому файл служит точкой синхронизации c для двух независимых сборок.

Возможно, вы также сможете сделайте что-нибудь с функцией ParseConfig, если вы напишете сценарий для вызова, который преобразует информацию из A в форму, которую может потреблять B.

Все это подразумевает некоторые изменения в A сборка, однако. Они должны быть безвредными с точки зрения A: запись файла или экспорт некоторых переменных - это одноразовая операция, если только кто-то не подслушивает их - при условии, что сборка A достаточно чиста.

случай) может быть применимо? https://github.com/SCons/scons/wiki/SconstructMultiple

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...