cmake: check toolchain and libraries at configure stage

Модератор: Модераторы разделов

IMB
Сообщения: 2450
ОС: Debian

cmake: check toolchain and libraries at configure stage

Сообщение IMB » 12.07.2019 17:01

Добрый день!
autotools позволяет собирать простые тестовые приложения описанные в configure.ac
Пример из libpcap/configure.ac, приложил файл полностью

Shell

AC_CHECK_HEADERS(net/pfvar.h, , , [#include <sys/types.h>
#include <sys/socket.h>
#include <net/if.h>])
if test "$ac_cv_header_net_pfvar_h" = yes; then
#
# Check for various PF actions.
#
AC_MSG_CHECKING(whether net/pfvar.h defines PF_NAT through PF_NORDR)
AC_TRY_COMPILE(
[#include <sys/types.h>
#include <sys/socket.h>
#include <net/if.h>
#include <net/pfvar.h>],
[return PF_NAT+PF_NONAT+PF_BINAT+PF_NOBINAT+PF_RDR+PF_NORDR;],
[
AC_MSG_RESULT(yes)
AC_DEFINE(HAVE_PF_NAT_THROUGH_PF_NORDR, 1,
[define if net/pfvar.h defines PF_NAT through PF_NORDR])
],
AC_MSG_RESULT(no))
fi
Как можно осуществить подобное в cmake?
Зачем это надо? При кросс-компиляции cmake своим стандартным модулем может найти и попытаться использовать, например, хостовый zlib и такая проверка это выявит на раннем этапе.
Спасибо.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 15629
Статус: grammatikführer
ОС: Debian GNU/Linux

Re: cmake: check toolchain and libraries at configure stage

Сообщение Bizdelnick » 12.07.2019 17:43

IMB писал(а):
12.07.2019 17:01
При кросс-компиляции cmake своим стандартным модулем может найти и попытаться использовать, например, хостовый zlib
Если у Вас правильно прописан toolchain, то не может. Вы указываете свой sysroot в переменной CMAKE_FIND_ROOT_PATH, определяете

Код: Выделить всё

set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
и всё, ничего с хоста не подцепится. Ну, конечно, если CMakeLists не безобразно кривые, и в них не захардкожен поиск по общесистемным путям, но за такое руки отрывать надо.

Но если хотите сделать cmake таким же тормозным, как autocrap, то это, конечно, тоже возможно. try_compile в помощь. Готового модуля, который бы проверял, определены ли те или иные макросы, не знаю, но можете написать свой на основе CheckIncludeFile, если это не разовая задача.
Пишите правильно:
в консоли
вкупе (с чем-либо)
в общем
вообще
в течение (часа)
команда
новичок
нюанс
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

IMB
Сообщения: 2450
ОС: Debian

Re: cmake: check toolchain and libraries at configure stage

Сообщение IMB » 15.07.2019 12:35

Bizdelnick писал:
12.07.2019 17:43
Если у Вас правильно прописан toolchain, то не может.
В toolchain всё-же не принято включать все возможные либы ;) А если он и включает либы общие назначения, такие как zlib, libjpeg, libpng, openssl и т.п., то, как правило, версии назвать актульными нельзя.
Bizdelnick писал:
12.07.2019 17:43
и в них не захардкожен поиск по общесистемным путям, но за такое руки отрывать надо.

CMakeLists.txt

find_package(ZLIB REQUIRED)
.........
target_link_libraries(..........
ZLIB::ZLIB
...........)
Пока вижу нечто такое.
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 15629
Статус: grammatikführer
ОС: Debian GNU/Linux

Re: cmake: check toolchain and libraries at configure stage

Сообщение Bizdelnick » 15.07.2019 14:25

IMB писал(а):
15.07.2019 12:35
В toolchain всё-же не принято включать все возможные либы
Не понял, о чём Вы. Я имел в виду файл toolchain от cmake, там ничего про либы нет. Пройдите по ссылке, что ли.
Пишите правильно:
в консоли
вкупе (с чем-либо)
в общем
вообще
в течение (часа)
команда
новичок
нюанс
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

IMB
Сообщения: 2450
ОС: Debian

Re: cmake: check toolchain and libraries at configure stage

Сообщение IMB » 15.07.2019 15:38

Так и я изначально о линковке с внешними либами :)
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 15629
Статус: grammatikführer
ОС: Debian GNU/Linux

Re: cmake: check toolchain and libraries at configure stage

Сообщение Bizdelnick » 15.07.2019 15:43

Я прекрасно понял, о чём Вы. Если Вы всё правильно пропишете в toolchain, то find_package и т. п. ни при какой погоде не найдёт никаких хостовых библиотек, будет искать их только в ${CMAKE_FIND_ROOT_PATH}.
Пишите правильно:
в консоли
вкупе (с чем-либо)
в общем
вообще
в течение (часа)
команда
новичок
нюанс
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

IMB
Сообщения: 2450
ОС: Debian

Re: cmake: check toolchain and libraries at configure stage

Сообщение IMB » 15.07.2019 16:06

Спасибо, возможно ли решить проблему без toolchain-файла?
Насколько я увидел там указываются абсолютные пути, что сравнительно удобно при автоматической сборке на сервере, но обязывать каждого разработчика придерживаться аналогичной структуры не очень хорошо.
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 15629
Статус: grammatikführer
ОС: Debian GNU/Linux

Re: cmake: check toolchain and libraries at configure stage

Сообщение Bizdelnick » 15.07.2019 16:23

IMB писал(а):
15.07.2019 16:06
возможно ли решить проблему без toolchain-файла?
Можно. Не используйте cmake или откажитесь от кросс-компиляции.
IMB писал(а):
15.07.2019 16:06
Насколько я увидел там указываются абсолютные пути, что сравнительно удобно при автоматической сборке на сервере, но обязывать каждого разработчика придерживаться аналогичной структуры не очень хорошо.
Ну пусть разработчик держит у себя свой toolchain, соответствующий его предпочтениям. Не вижу в этом проблемы.
Пишите правильно:
в консоли
вкупе (с чем-либо)
в общем
вообще
в течение (часа)
команда
новичок
нюанс
приемлемо
проблема
пробовать
трафик
Спасибо сказали: