Как потребовать проект autotools / получить флаги для пакета autotools? - PullRequest
1 голос
/ 19 марта 2019

Я хочу требовать библиотеку c, которая была собрана с помощью автоинструментов. Если честно, я почти не представляю, как они работают: / (Библиотека, которую я хочу запросить: "https://github.com/p4lang/PI")

Я выполнил сценарии ./configure и т. Д. И успешно установил его.

Когда я ищу свой usr, я нахожу библиотеку в /usr/local/lib/libpi.a и аналогично заголовочные файлы в /usr/local/include/PI.

Я строю свой проект с помощью cmake и хотел бы использовать кроссплатформенное решение. Однако я был бы рад использовать команду pkg-config.

Кто-нибудь знает, каков «правильный» / «рекомендуемый» способ получения cflags, или хотя бы вариант, в котором мне не нужно жестко кодировать пути?

1 Ответ

2 голосов
/ 19 марта 2019

Участие Autotools заканчивается в точке, где в системе установлены встроенные артефакты. Использование для тех, кто не проходит через Autotools. * Это относится так же, когда установленные артефакты являются библиотеками и заголовками, так же как и когда они являются исполняемыми файлами.Нет ничего особенного или отличного в использовании программ или библиотек, созданных Autotools.

Я строю свой проект с помощью cmake и хотел бы иметь кроссплатформенное решение с ним.Однако я был бы рад использовать команду pkg-config.

Так же, как проекты, обслуживаемые любой другой системой сборки, проекты Autotools могут собирать и устанавливать файлы конфигурации pkg-config, или макросы CMake, или любые другиедругие части, которые они могут счесть целесообразными, чтобы помочь пользователям, но это зависит от проекта.Автоинструменты не создают такие дополнительные части по своему усмотрению, но некоторые проекты, основанные на Автоинструментах, добавляют их.А некоторые нет, как некоторые проекты CMake, а некоторые проекты с системами сборки, созданными вручную, и т. Д.

Кто-нибудь знает, что является «правильным» /«рекомендуемый» способ получить cflags или, по крайней мере, вариант, в котором мне не нужно жестко кодировать пути?

Обратите внимание, что обычно для библиотеки, имя которой вы знаете, помечаются только вымогут потребоваться те, которые указывают местоположение заголовков библиотек и / или один, указывающий местоположение самих библиотек.Даже они не нужны, если соответствующие части установлены в местах, которые компилятор смотрит по умолчанию.Также они, как правило, не считаются CFLAGS, per se .Терминология немного различается, но первый - это флаг препроцессора, а второй - флаг ссылки.

Поскольку вы используете CMake, вы можете подумать о написании кода CMake для поиска в вероятных каталогах нужных библиотек и заголовков.и установить результаты в подходящих переменных для другого кода для использования.Это скорее подход в стиле Autotools.В качестве альтернативы, вы можете определить пользовательскую переменную, с помощью которой в CMake могут быть указаны нужные местоположения.Это предполагает, что сторонний проект еще не предоставляет что-то полезное для этой цели.Или, если разрешить лицензирование, вы можете упаковать стороннюю библиотеку вместе со своей собственной, чтобы вы могли контролировать место ее установки.

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


* Может быть сделано исключение для использования архивов libtool , которые проект Autotools может установить вместе с обычными библиотеками - если кто-то захочет использовать их, они будут прямо или косвенно проходить libtool.Но на практике это произойдет только в другом проекте Autotools.

...