Cmake 检查兼容性
我有一个应用程序需要使用cmake编译的openssl。稳定的AIX7.1Cmake版本是3.14.3 在cmake构建文件中,我有一个测试Cmake 检查兼容性,cmake,gnu,aix,Cmake,Gnu,Aix,我有一个应用程序需要使用cmake编译的openssl。稳定的AIX7.1Cmake版本是3.14.3 在cmake构建文件中,我有一个测试 include(CheckCSourceCompiles) check_c_source_compiles(check_openssl.c HAS_NEW_ENOUGH_OPENSSL) 检查openssl.c #include <stdio.h> #include "/usr/local/include/openssl/ossl_type.
include(CheckCSourceCompiles)
check_c_source_compiles(check_openssl.c HAS_NEW_ENOUGH_OPENSSL)
检查openssl.c
#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;
}
编辑:正确使用
check\u c\u source\u compiles()
需要在CMake文件中内联插入实际的c代码。此外,由于代码包含引号,因此必须使用反斜杠(\“
)转义引号。请参见下面的示例
此命令应用于检查源是否可以编译并链接到可执行文件。如果可以,则应使用
add_executable()
或add_library()
实际编译它。编译完成后,您可以运行它来打印注释消息。或者,如果您想在一次扫描中检查编译、链接和运行兼容性,您应该使用@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)
#检查编译、链接和运行兼容性。
包括(检查资源)
检查\u c\u源\u运行(
"
#包括
#include \“/usr/local/include/openssl/ossl_type.h \”
#include\“/usr/local/include/openssl/evp.h\”
int main(int argc,字符**argv){
printf(\“out=%d\”,!EVP\u aes\u 256\u ctr);
返回!EVP_aes_256_ctr;
}
"
有足够的新的OPENSSL吗
)
#如果兼容,则构建。
如果(是否有足够的新的OPENSSL)
添加可执行文件(MyOpenSslTest check\u openssl.c)
endif()
...
未设置(有足够的新OPENSSL缓存)
注意:这些命令依赖于其他变量来检索所有必要的编译/链接选项,以成功测试兼容性。您可能需要设置CMAKE_REQUIRED_包括、CMAKE_REQUIRED_库
,或中列出的一些其他变量,以使用ut错误。您可以检查CMakeError.log
文件,查看兼容性检查期间可能发生的错误
另外,结果变量有足够的新功能\u OPENSSL
将被缓存,并且在源文件更改时不会更改,因此您可能希望在使用完后取消设置它。您是否收到任何错误消息,或者根本不工作?(注意:它实际上是一个AIX3?那么您的硬件现在已经有20多年的历史了,不是吗?)我的错误是不清楚。至于错误消息,我没有得到任何消息。你到底尝试了什么命令,得到了什么结果?什么都没有发生?“当我用cmake测试它时,我得到了编译错误。”-显示错误(添加到问题帖)@CandyHo您的C代码需要内联放置在您的CMake文件中的引号内。请参阅我的扩展答案。
# 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)