Фильтрация с помощью CMake? - PullRequest
       6

Фильтрация с помощью CMake?

1 голос
/ 05 сентября 2011

У меня есть числовая векторная реализация на C; вся реализация основана на TYPE, а затем я делаю s / TYPE / double / g, чтобы получить реализацию для double, и s / TYPE / int /, чтобы получить реализацию для int. До сих пор я основывал фильтрацию на крошечном скрипте sed, на который ссылается add_custom_command () из файла CMakeLists.txt. Это нормально работало на Linux, но при попытке создать решение Visual Studio не удается (в Visual Studio).

Поскольку процесс, который я выполняю (поиск-замена в файле и сохранение вывода в виде нового файла), настолько прост, что я подумал, может быть, этого можно достичь с помощью встроенных команд CMake?

Йоаким

1 Ответ

1 голос
/ 05 сентября 2011

В чистом cmake у вас есть как минимум 3 пути:

1) configure_file команда

  • полезна для простых замен, когда вам нужно только заменить некоторые заполнителив файле шаблона на основе текущей конфигурации проекта;
  • cmake автоматически сгенерирует зависимость от файла шаблона и сгенерирует ваш файл при изменениях шаблона.

2) Возможно использовать *Команды 1012 * или FILE STRINGS и FILE WRITE для выполнения любого преобразования на этапе настройки cmake.

  • возможно любое пользовательское преобразование

Но

  • сложнее поддерживать;
  • стоит производительности cmake;
  • нет автоматического мониторинга изменений файла шаблона.

3) Если абсолютно необходимо сгенерировать этофайла во время сборки, затем вы можете использовать cmake в режиме сценария процесса (cmake -P) с add_custom_command:

add_custom_command(OUTPUT vector.c
                   COMMAND $(CMAKE_COMMAND) -DTEMPLATE:STRING=vector.template -P genscript.cmake
                   DEPENDS vector.template genscript.cmake)

Где genscript.cmake - вспомогательный скрипт, который вам нужно написать.Он должен генерировать vector.c с 1) или 2) подходом, прослушанным выше.

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