нужна помощь при использовании стороннего make-файла при создании моего собственного проекта.В том числе makefile при использовании cmake
ответ
Существует не путь к тому, что вы хотите напрямую. 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, вы можете:
- Fetch ваши 3-библиотек (загружать, копировать, разархивировать, и т.д.)
- пропатчить Makefiles этих библиотек
- Run
make
на этом исправленный Makefiles
Теперь этот патч, о котором я упоминал, - это то, что вам нужно было бы написать, и сохранить исходный код вашего основного проекта. Содержимое этого патча станет новой целью для создания файла, который вы можете включить в свой CMakeLists.txt
через include()
. Вы можете начать просто и получить эту новую цель (например: make output_variables
) написать список команд set()
для lib_A.cmake
. После этого вы можете перейти к более сложному результату; например, написать файл lib_A-config.cmake
, который понимал бы CMake's find_package()
.
Конечно, последний вариант, вероятно, самый сложный, но может облегчить обслуживание вашего основного проекта, уменьшив боль в будущем. Вы также получите более глубокое понимание CMake.
«Я попытался использовать следующее, но он не работает ...» Как это не работает? Чего вы ожидали? Что случилось? – nega
Вы должны сказать cmake, как интерпретировать то, что делает gmake + makefile. CMake не просто волшебным образом импортирует некоторые случайные строки. Как он будет знать это правильно? Как бы это сделать безопасно? Может быть, если вы представили пример вывода gmake + makefile и что вы хотите сделать с этим выходом? – nega
Что значит «делать»? просто печать на терминал? восстановление ваших сторонних библиотек с помощью этих флагов? записывая эти флаги в файл? – nega