外部Cライブラリ用にFindXXX.cmake
スクリプトを書いています。スクリプトにライブラリのバージョンに関する情報を提供したいと思います。ただし、ライブラリはバージョン番号を文字列として返す関数の形式でしかこの情報を提供しません。CMakeでバイナリからライブラリのバージョンを抽出する
私はその場で次のCプログラムをコンパイルFindXXX.cmake
持つことで、バージョン番号を抽出できると思っていた:
#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をキャプチャする方法はありますか?
ありがとうございます!私はクロスコンパイルの最後のビットを得ていませんでした。詳しく教える? –
クロスコンパイルすると*ライブラリーとリンクすることができますが、ライブラリーをロードすることはできません(*プログラムを実行する*)。これは*ホスト*プラットフォーム( 'cmake'を実行する場所)が*ターゲット*プラットフォーム(ライブラリがロードされることを意図しているプラットフォーム)と異なるためです。その場合は、ライブラリのバージョンを取得するための他の方法が必要です。たとえば、* target *マシンでプログラムを実行し、その実行に応じて特定のCMakeキャッシュ変数を設定するようにユーザーに依頼することができます。 – Tsyvarev