#cmake #thrift
#cmake #бережливость
Вопрос:
Я попытался выполнить поиск в документации CMake, но не смог понять, как вызывать внешние программы из CMake.
Есть несколько вещей, которые я хочу сделать.
- Скомпилируйте другие сторонние зависимости, использующие makefile
- Скомпилируйте файлы определения бережливости в заглушки C / Python.
- Скомпилируйте файлы определения Cython.
Другой вопрос в том, какой вообще хороший способ справиться с этими случаями? Такое ощущение, что вызов сценария оболочки непосредственно из CMake не кажется таким уж чистым, когда «C» в CMake обозначает кроссплатформенность.
РЕДАКТИРОВАТЬ: у меня есть несколько дополнительных вопросов. Ранее, в моей сборке, я предварительно создавал свои зависимости, и сам проект использовал FIND_PACKAGE (…), чтобы найти заголовок / библиотеки для зависимостей.
Теперь я использую ExternalProject_Add () для компиляции зависимостей, но проблема в том, что все мои функции FindXYZ () завершаются сбоем при запуске cmake .
, потому что зависимости отсутствуют при выполнении CMake.
Как я должен включать сторонние библиотеки в свой проект в этом случае?
Ответ №1:
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().