gpt4 book ai didi

c - 使用 CMake 从二进制文件中提取库版本

转载 作者:太空宇宙 更新时间:2023-11-04 02:33:14 25 4
gpt4 key购买 nike

我正在为外部 C 库编写一个 FindXXX.cmake 脚本。我希望我的脚本提供有关库版本的信息。但是,该库仅以函数的形式提供此信息,该函数将版本号作为字符串返回。

我想我可以通过让 FindXXX.cmake 即时编译以下 C 程序来提取版本号:

#include <stdio.h>
#include "library.h"

int main() {
char version[256];
get_version(version);
puts(version);
return 0;
}

为了让它工作,CMake 应该在配置时编译并运行上面的程序,并将它打印的信息用作版本标识符。我知道如何做后者(execute_process),我几乎知道如何做前者:CheckCSourceRuns想到了,但我不知道如何捕获生成的可执行文件的标准输出。

TL;DR:有没有办法编译程序、运行程序并在生成时从 CMake 捕获其标准输出?

最佳答案

您可以使用 try_run为此目的(假设您的源文件被命名为 foo_get_version.c):

try_run(foo_run_result foo_compile_result
foo_try_run ${CMAKE_CURRENT_LIST_DIR}/foo_get_version.c
RUN_OUTPUT_VARIABLE foo_run_output)

if(NOT foo_compile_result)
# ... Failed to compile
endif()
if(NOT foo_run_result EQUAL "0")
# ... Failed to run
endif()

# Now 'foo_run_output' variable contains output of your program.

请注意,交叉编译 时不会执行try_run。相反,CMake 希望用户设置缓存变量 foo_run_resultfoo_run_result__TRYRUN_OUTPUT

关于c - 使用 CMake 从二进制文件中提取库版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40800720/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com