РЕДАКТИРОВАТЬ: Для правильного использования check_c_source_compiles()
необходимо вставить фактический код C inline в файл CMake.Кроме того, поскольку ваш код содержит кавычки, вы должны экранировать кавычки с обратной косой чертой (\"
).Смотрите мой пример ниже.
Эта команда check_c_source_compiles()
должна использоваться для проверки , если источник может быть скомпилирован и связан с исполняемым файлом.Если это возможно, то вы должны использовать add_executable()
или add_library()
для его фактической компиляции.После компиляции вы можете запустить его, чтобы напечатать сообщение с комментарием.Или, если вы хотите проверить совместимость компиляции, компоновки и запуска всего за один раз, вы должны использовать check_c_source_runs()
вместо этого, как предложил @Tsyvarev.Вы не опубликовали полный пример своего кода, но я думаю, вы могли бы сделать что-то вроде этого:
# Check for compile, link, run compatibility.
include(CheckCSourceRuns)
check_c_source_runs(
"
#include <stdio.h>
#include \"/usr/local/include/openssl/ossl_type.h\"
#include \"/usr/local/include/openssl/evp.h\"
int main(int argc, char **argv){
printf(\"out = %d\", !EVP_aes_256_ctr);
return !EVP_aes_256_ctr;
}
"
HAS_NEW_ENOUGH_OPENSSL
)
# Build if it is compatible.
if(HAS_NEW_ENOUGH_OPENSSL)
add_executable(MyOpenSslTest check_openssl.c)
endif()
...
unset(HAS_NEW_ENOUGH_OPENSSL CACHE)
ПРИМЕЧАНИЕ: Эти команды полагаются на другие переменные для извлечения всехнеобходимые параметры компиляции / ссылки для успешного тестирования совместимости.Скорее всего, вам потребуется установить CMAKE_REQUIRED_INCLUDES
, CMAKE_REQUIRED_LIBRARIES
или некоторые другие переменные, перечисленные в документации , чтобы безошибочно запускать команды check_c_*
.Вы можете проверить файл CMakeError.log
, чтобы увидеть, какие ошибки могут возникать при проверке совместимости.
Кроме того, переменная результата HAS_NEW_ENOUGH_OPENSSL
будет кэшироваться и не будет меняться при изменении исходного файла, поэтомувы можете захотеть unset
после того, как вы его используете.