CMake check_function_exists не делает - PullRequest
0 голосов
/ 07 мая 2018

Я работаю с CMake Tutorial и проверяю с соответствующими файлами проекта и застреваю на шаге 4.

Инструкции добавляют эти строки в файл CMakeLists.txt верхнего уровня:

# does this system provide the log and exp functions?
include (CheckFunctionExists)
check_function_exists (log HAVE_LOG)
check_function_exists (exp HAVE_EXP)

Как уже отмечалось, это тривиальный тест, поскольку почти каждая система на планете имеет log и exp. Но это не удается. При генерации Makefiles я вижу

-- Looking for log
-- Looking for log - not found
-- Looking for exp
-- Looking for exp - not found

Если я копаю глубже, запустив cmake --trace, я вижу следующие строки:

.../tutorial/src/CMakeLists.txt(19):  include( CheckFunctionExists )
/usr/share/cmake/Modules/CheckFunctionExists.cmake(32):  macro(CHECK_FUNCTION_EXISTS FUNCTION VARIABLE )
.../tutorial/src/CMakeLists.txt(20):  check_function_exists(log HAVE_LOG )
/usr/share/cmake/Modules/CheckFunctionExists.cmake(33):  if(HAVE_LOG MATCHES ^HAVE_LOG$ )
.../tutorial/src/CMakeLists.txt(21):  check_function_exists(exp HAVE_EXP )
/usr/share/cmake/Modules/CheckFunctionExists.cmake(33):  if(HAVE_EXP MATCHES ^HAVE_EXP$ )

В файле CheckFunctionExists.cmake нет условия else для этого теста. Я новичок в cmake, но тесты кажутся мне верными. Чего мне не хватает?

CentOS 7, cmake 2.8.12.2

1 Ответ

0 голосов
/ 07 мая 2018

CheckFunctionExists, как известно, имеет серьезные недостатки. См. документацию .

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

Рекомендуемая замена CheckSymbolExists. К сожалению, это не поддерживается вашей версией cmake. Вам нужно будет обновить хотя бы до 3.0.2, чтобы это работало.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...