不确定你是否会喜欢这个,但我认为编译和运行一个小型 C 程序并使用它的输出将是最简单的方法。毕竟,您需要做的是非常定制的,但在 C 中很容易做到。
cmake_minimum_required(VERSION 2.8)
project(test)
try_run(RUN_RESULT COMPILE_RESULT ${CMAKE_CURRENT_BINARY_DIR}/bin
${CMAKE_CURRENT_SOURCE_DIR}/filesize.c
RUN_OUTPUT_VARIABLE FILE_SIZE
ARGS ${CMAKE_CURRENT_SOURCE_DIR}/bigfile)
if (NOT COMPILE_RESULT)
message(FATAL_ERROR "Filesize failed to compile")
endif()
if (RUN_RESULT EQUAL 0)
message(STATUS "Filesize ${FILE_SIZE}")
else()
message(WARNING "Filesize failed")
endif()
在文件大小.c 中:
#include <stdio.h>
int main(int argc, const char *argv[])
{
FILE *fp = fopen(argv[1], "rb");
if (fp != NULL) {
fseek(fp, 0, SEEK_END);
printf("%d", ftell(fp));
fclose(fp);
return 0;
}
return 1;
}
COMPILE_RESULT 是 TRUE 或 FALSE。如果找不到文件,try_run 会返回错误(在 RUN_RESULT 中)。否则,cmake 会运行程序,该程序会查找文件末尾并以字节为单位打印大小。结果被捕获在 FILE_SIZE 变量中。
唯一的问题是它不适用于交叉编译,因为在这种情况下 try_run 不会运行任何东西。