2017-02-06 14 views
0

нужна помощь при использовании стороннего make-файла при создании моего собственного проекта.В том числе makefile при использовании cmake

+0

«Я попытался использовать следующее, но он не работает ...» Как это не работает? Чего вы ожидали? Что случилось? – nega

+0

Вы должны сказать cmake, как интерпретировать то, что делает gmake + makefile. CMake не просто волшебным образом импортирует некоторые случайные строки. Как он будет знать это правильно? Как бы это сделать безопасно? Может быть, если вы представили пример вывода gmake + makefile и что вы хотите сделать с этим выходом? – nega

+0

Что значит «делать»? просто печать на терминал? восстановление ваших сторонних библиотек с помощью этих флагов? записывая эти флаги в файл? – nega

ответ

1

Существует не путь к тому, что вы хотите напрямую. CMake не предоставляет возможность включать файлы в свои сгенерированные файлы. (т. е. включить «3rdparty.mk» в созданный CMake Makefile.) Также вы не можете напрямую включить «сгенерированный файл-тип» (то есть: Makefile) в CMakeLists.txt. CMake ExternalProject также не позволит вам это сделать.

Что вам нужно сделать, так или иначе «разобрать» файл makefile, который имеет необходимую вам информацию. Есть множество способов, которыми вы можете это сделать. Например, вы можете написать оболочку оболочки-скрипта, которая будет grep ваш make-файл для чего вам нужно, а затем построить командную строку CMake с определенными вами переменными и вывести ее или вызвать cmake для вас. В зависимости от того, насколько комфортно вы работаете с оболочкой (или perl, python и т. Д.), Вы можете почувствовать, что это лучший вариант.

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

Вы также можете остановиться в CMake-land и использовать CMake's ExternalProject, чтобы помочь вам. Используя ExternalProject, вы можете:

  1. Fetch ваши 3-библиотек (загружать, копировать, разархивировать, и т.д.)
  2. пропатчить Makefiles этих библиотек
  3. Run make на этом исправленный Makefiles

Теперь этот патч, о котором я упоминал, - это то, что вам нужно было бы написать, и сохранить исходный код вашего основного проекта. Содержимое этого патча станет новой целью для создания файла, который вы можете включить в свой CMakeLists.txt через include(). Вы можете начать просто и получить эту новую цель (например: make output_variables) написать список команд set() для lib_A.cmake. После этого вы можете перейти к более сложному результату; например, написать файл lib_A-config.cmake, который понимал бы CMake's find_package().

Конечно, последний вариант, вероятно, самый сложный, но может облегчить обслуживание вашего основного проекта, уменьшив боль в будущем. Вы также получите более глубокое понимание CMake.

 Смежные вопросы

  • Нет связанных вопросов^_^