2012-04-10 2 views
5

Я понимаю, что Jam строит существующие проекты, а CMake генерирует проекты для сборки. Но, учитывая, что я предпочел бы генерировать проекты, которые я мог бы использовать в различных IDE, а не пытаться интегрировать Jam в эти IDE, есть ли у кого-нибудь опыт/успех превращения Jamfile в файл CMakeLists.txt?Миграция с Jam на CMake

ответ

0

Итак, в итоге я решил, что лучше всего начать проект CMAKE с нуля. Наш проект Jam был таким беспорядком, я не хотел переносить крупицу нашей сборки спагетти.

Я нашел эти ресурсы, чтобы быть наиболее полезным

http://www.cmake.org/Wiki/CMake_Useful_Variables http://www.cmake.org/cmake/help/v2.8.10/cmake.html

4

Раньше я использовал Jam для всех моих проектов Linux, поскольку это было проще, чем обычные make-файлы. Затем я обнаружил CMake и не вернулся. Это так же легко писать файлы CMakeLists.txt, как и писать Jamfiles, и вы получаете бесплатную поддержку IDE на платформе, хотя ИМО проекты IDE не так чисты, как что-то, созданное вручную.

Из того, что я видел, очень мало людей используют Jam в наши дни, несмотря на множество преимуществ. Он утверждает, что способен строить на разных платформах, но в то же время он, похоже, больше не пользуется активным развитием, поэтому я склонен недоверять его многоплатформенным требованиям.

Насколько я знаю, нет инструмента для автоматической конвертации иерархии Jamfiles в иерархию файлов CMakeLists.txt, хотя такой инструмент, безусловно, будет осуществимым проектом. Однако, благодаря непопулярности Jam и, в меньшей степени, CMake, если вы или я не находим какое-то свободное время, такой инструмент не находится на горизонте. :(

Если ваш проект не слишком сложен, некоторые простой поиск и замены должны преобразовать Jamfile в файл CMakeLists.txt. Если ваш проект является сложным, то преобразование их вручную, вероятно, ваш лучший выбор.

Некоторые простые преобразования:

  • HDRS += a.h b.h c.h ; становится include_directories(a.h b.h c.h)
  • Main HelloWorld : main.cpp utils.cpp ; становится add_executable(HelloWorld main.cpp utils.cpp utils.h)
  • Library helper : helper.cpp становится add_library(helper STATIC helper.cpp helper.h)
  • SubDir foo ; становится add_subdirectory(foo)
  • LinkLibraries HelloWorld : libhelper ; становится target_link_libraries(HelloWorld helper)

В среде IDE проектов, CMake сгенерированные автоматически не включают в себя связанные файлы заголовков, поэтому я явно включены важные в приведенных выше примерах. Хороший пример here, если вы его еще не видели.

1

Для преобразования Jam в CMake может быть полезно попробовать расширить vcproj2cmake для реализации Jam-парсера (генераторная часть для текстовых потоков синтаксиса CMake теперь достаточно способна).