1
我正在为外部C库编写FindXXX.cmake
脚本。我希望我的脚本提供有关库版本的信息。但是,库仅以一种函数的形式提供此信息,该函数以字符串形式返回版本号。从与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。
TL; DR:有没有办法编译一个程序,运行它并在生成时从CMake捕获它的stdout?
谢谢,这个作品!不过,我没有得到关于交叉编译的最后一点。谨慎阐述? –
当交叉编译时,你*可能会链接*库(即*编译*你的程序),但**不能加载**库(即*运行*你的程序)。这是因为* host *平台(您运行'cmake'的地方)与* target *平台不同(打算加载库的地方)。在这种情况下,您需要一些其他方式来获取库的版本。例如,您可能会要求用户在* target *机器上运行您的程序,并根据该运行设置某些CMake缓存变量。 – Tsyvarev