Скажите CMake скопировать сгенерированный файл и некоторые исходные файлы в каталог, а затем вызвать внешний инструмент - PullRequest
2 голосов
/ 10 июня 2011

Я очень плохо знаком с CMake, но у меня есть опыт работы с общими средами сборки, такими как Make.

Структура нашего проекта выглядит следующим образом:

   $ROOT\cpp\bindings\ruby
   $ROOT\cpp\bindings\ruby\ext
   $ROOT\cpp\src
   $ROOT\cpp\include

Мы используем swig для генерации привязок Rubyдля нашей библиотеки C ++.Теперь я хочу скопировать исходный код, сгенерированный swig ($ ROOT \ cpp \ bindings \ ruby ​​\ rubyRUBY_wrap.cxx) вместе с заголовками в $ ROOT \ cpp \ include, в каталог $ ROOT \ cpp \ bindings \ ruby ​​\ ext.Тогда я смогу собрать все это вместе с нашей средой сборки в виде GEM для распространения.

Не могу найти в Интернете пример того, как сделать это в CMake, и был бы признателен за помощь.Как мне скопировать сгенерированный файл и известный каталог в папку?

1 Ответ

2 голосов
/ 11 июня 2011

В вашем случае, я бы лучше добавил специальную цель для распространения и включил специальный файл CMakeLists.txt (или другую систему сборки, например, Autotools) в полученный архив. Примерно так, предположим, что у вас есть файл CMakeLists.txt в вашем $ ROOT / cpp:

set (dist_gem_name package-gem-1.2.3)
add_custom_target (dist_gem
    COMMAND ${CMAKE_COMMAND} -E  # Create a working directory.
        make_directory ${dist_gem_name}
    COMMAND ${CMAKE_COMMAND} -E  # Copy a build system in there.
        copy ${CMAKE_SOURCE_DIR}/CMakeLists-gem.txt ${dist_gem_name}
    COMMAND ${CMAKE_COMMAND} -E  # Copy the source file.
        copy ${CMAKE_SOURCE_DIR}/bindings/ruby/rubyRUBY_wrap.cxx ${dist_gem_name}
    COMMAND ${CMAKE_COMMAND} -E  # Copy the directory with header files.
        copy_directory ${CMAKE_SOURCE_DIR}/include ${dist_gem_name}
    COMMAND ${CMAKE_COMMAND} -E  # Create a distribution archive.
        tar czf ${dist_gem_name}.tgz ${dist_gem_name}
    COMMAND ${CMAKE_COMMAND} -E  # Dispose of our directory.
        remove_directory ${dist_gem_name}
    DEPENDS ${CMAKE_SOURCE_DIR}/bindings/ruby/rubyRUBY_wrap.cxx
    WORKING_DIR ${CMAKE_BINARY_DIR})

Как видите, вы можете делать подобные вещи с помощью cmake -E. Если вы хотите запускать такие вещи во время настройки, используйте execute_process. Если вы хотите увидеть список доступных команд, просто запустите cmake -E без дополнительных параметров.

...