C-从带有CMAKE的二进制文件中提取库版本



我正在为外部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想到了,但是我不知道如何捕获生成的可执行文件的stdout。P>

tl; dr :是否有一种方法可以编译程序,运行并捕获其生成时Cmake的Stdout?

您可以将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

相关内容

  • 没有找到相关文章

最新更新