Подтвердить что ты не робот

Как проверить файлы заголовков и библиотечные функции в CMake, как это делается в Autotools?

В настоящее время я конвертирую небольшой проект C из autotools в CMake.

В старом configure.in я проверил каждую функцию заголовка и библиотеки на существование, используя следующие строки:

# Checks for header files
AC_HEADER_STDC
AC_CHECK_HEADERS([stdlib.h time.h math.h sys/stat.h errno.h unistd.h fcntl.h signal.h])

# Checks for library functions
AC_FUNC_FORK
AC_CHECK_FUNCS([time localtime mktime gmtime exit fork chdir atol signal])
AC_FUNC_STRFTIME

Это то, что многие проекты autotools делают AFAIK.

Несмотря на то, что компилятор уже проверяет необходимые файлы заголовков и проверяет компоновщик на функции библиотеки, мой код по-прежнему нуждается в этих проверках, выполненных на этапе настройки, чтобы правильно настроить его для флагов #ifdef HAVE_FOOBAR и так же.

В этом случае, что лучше всего проверять на заголовки/функции с помощью CMake?

4b9b3361

Ответ 1

Вы можете легко перенести это с помощью CHECK_FUNCTION_EXISTS, CHECK_INCLUDE_FILE, CHECK_TYPE_SIZE и т.д. Также см. CMake_HowToDoPlatformChecks для некоторых советов.


Конфигурирование в этом стиле добавляет переносимость (т.е. вы можете проверить ucontext.h и setjmp.h и использовать тот, который присутствует, изменяя ваш код с помощью #ifdef HAVE_UCONTEXT или #ifdef HAVE_SETJMP).

Кроме того, при распространении своего приложения вы хотите избежать компиляции ошибок (для пользователей) и, следовательно, с хорошей системой сборки, вы можете справиться с большинством различий в архитектуре перед распространением своего приложения.

Легче для не-программиста понять, что если "проверить для gtk + заголовок - не удалось", они должны установить gtk, вместо того, чтобы иметь buch строк компиляции, которые говорят то же самое, но не читаются для большинства их:)