2014-12-21 4 views
-1

При разработке установки приложения с командной строкой в ​​стиле Unix, если есть код, который будет скомпилирован точно в срок (JIT), существует ли стандартная или лучшая практика для местоположения в дереве установки, источник (и заголовки) должен быть установлен? Является ли ${root}/share/${appname}/src разумным?Что такое хорошая практика для установки кода, который будет скомпилирован JIT?

Конкретный контекст - это смешанное приложение C/C++, настроенное с помощью CMake, которое построено с использованием не более одной поддержки CUDA или OpenCL (которая может использовать JIT), но я не думаю, что для ответа это имеет значение.

Очевидно, нельзя полагаться на копию исходных файлов, которые находятся в источнике или дереве сборки, поскольку они не обязательно будут присутствовать (или могут быть найдены) во время выполнения.

ответ

2

Для кода ядра OpenCL измените вашу систему сборки, чтобы вставить код в заголовки в виде строк. Используйте строки напрямую, чтобы перейти в вашу рабочую среду OpenCL. Не нужно и мало причин держать ядра OpenCL в отдельных файлах. Вы можете использовать препроцессор, чтобы превратить файл .cl в заголовок, или лучше просто написать быстрый скрипт python для этого.

Я предполагаю, что подобные подходы будут работать и для других систем. Либо будет стандартная переменная местоположения или среды (c.f. CLASSPATH в Java), либо вы захотите встроить их непосредственно в установленный двоичный файл.

+0

Использование системы сборки для встраивания кода в библиотеку или исполняемый файл действительно представляет собой хорошую идею. Предварительная обработка их в строки, встроенные в скомпилированный источник, а затем переданные компилятору JIT, кажется мне лучше, чем предварительная обработка их в установленные (?) Заголовки. – mabraham

+1

Я имел в виду заголовок, который вы включаете в источник, только для более чистого кода. поэтому blah.cl становится const char * blah = "..."; в foo.h, а ваши источники на C или C++ включают foo.h. Таким образом вы создаете новый файл и включаете его в препроцессор, а не пытаетесь обновить существующий файл. – Lee

Смежные вопросы