Вызов внешних программ с помощью CMake

#cmake #thrift

#cmake #бережливость

Вопрос:

Я попытался выполнить поиск в документации CMake, но не смог понять, как вызывать внешние программы из CMake.

Есть несколько вещей, которые я хочу сделать.

  1. Скомпилируйте другие сторонние зависимости, использующие makefile
  2. Скомпилируйте файлы определения бережливости в заглушки C / Python.
  3. Скомпилируйте файлы определения Cython.

Другой вопрос в том, какой вообще хороший способ справиться с этими случаями? Такое ощущение, что вызов сценария оболочки непосредственно из CMake не кажется таким уж чистым, когда «C» в CMake обозначает кроссплатформенность.

РЕДАКТИРОВАТЬ: у меня есть несколько дополнительных вопросов. Ранее, в моей сборке, я предварительно создавал свои зависимости, и сам проект использовал FIND_PACKAGE (…), чтобы найти заголовок / библиотеки для зависимостей.

Теперь я использую ExternalProject_Add () для компиляции зависимостей, но проблема в том, что все мои функции FindXYZ () завершаются сбоем при запуске cmake . , потому что зависимости отсутствуют при выполнении CMake.

Как я должен включать сторонние библиотеки в свой проект в этом случае?

Ответ №1:

  1. http://www.kitware.com/media/html/BuildingExternalProjectsWithCMake2.8.html

2 3. может быть взломан с помощью CONFIGURE_COMMAND / BUILD_COMMAND /INSTALL_COMMAND

Комментарии:

1. Вау, мое уважение к CMake значительно возросло после открытия ExternProject_Add(). Скоро я попробую другие вещи.

2. Всем спасибо, кукуруза. Однако у меня есть еще немного вопросов относительно моей сборки. Не будете ли вы так любезны ответить, если сможете? Спасибо!

3. @ не уверен, что я понял вопрос, можете ли вы уточнить?

4. В итоге я изменил свои make-файлы. по сути, команды FIND_PACKAGE() выполняются во время генерации make-файлов cmake. Раньше я использовал FIND_PACKAGE() для поиска сторонних библиотек для своего проекта. Однако, если я начну использовать ExternalPackage_Add(), создание сторонней библиотеки произойдет после создания makefile. таким образом, cmake не смог приступить к генерации make-файлов, поскольку не смог найти зависимости, на которые ссылается FIND_PACKAGE().

5. Я только что удалил find_packages(), потому что, поскольку я контролирую, как компилируются внешние пакеты, я точно знаю, где расположены скомпилированные заголовки / библиотеки. Итак, я просто сослался на эти местоположения в include_directories() и target_link_libraries().