2

FindXXX.cmake外部 C ライブラリのスクリプトを作成しています。スクリプトでライブラリのバージョンに関する情報を提供したいと考えています。ただし、ライブラリは、バージョン番号を文字列として返す関数の形式でこの情報を提供するだけです。

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 から stdout をキャプチャする方法はありますか?

4

1 に答える 1

3

そのためには、 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

于 2016-11-25T09:02:15.553 に答える