不知道你是否會喜歡這個,但我認爲編譯和運行一個小的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()
而且在filesize.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是真還是假。如果找不到該文件,則try_run返回一個錯誤(在RUN_RESULT中)。否則,cmake運行程序,該程序尋找文件的結尾並以字節爲單位打印大小。結果將在FILE_SIZE變量中捕獲。
唯一的問題是它不能用於交叉編譯,因爲在這種情況下try_run不會運行任何東西。
我,爲什麼你會覺得這種奇怪的是一種常見的操作。 – RobertJMaynard
在用於創建和檢查各種類型文件的工具中,文件的大小是一個基本屬性。 @ sakara的解決方案還包括一個'TIMESTAMP'子命令,另一個基本屬性。 – metasim