Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cmake 检查兼容性_Cmake_Gnu_Aix - Fatal编程技术网

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.

我有一个应用程序需要使用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.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)