实现思路
- 检测平台:利用预定义宏
__linux__
和 _WIN32
来判断当前编译平台。
- 获取编译时间:使用
__DATE__
和 __TIME__
宏,这两个宏会在编译时被替换为当前的日期和时间。
- 获取编译文件路径:在Linux下可以通过
__FILE__
宏获取相对路径,结合 realpath
函数获取绝对路径;在Windows下可以使用 GetModuleFileName
函数获取当前可执行文件路径,进而推断出编译文件所在目录。
- 记录信息:将获取到的平台信息、编译时间和编译文件路径记录到日志文件或者进行其他处理。
关键代码示例
#include <stdio.h>
#include <stdlib.h>
#ifdef _WIN32
#include <windows.h>
#endif
#ifdef __linux__
#include <unistd.h>
#include <limits.h>
#endif
int main() {
#ifdef _WIN32
char path[MAX_PATH];
GetModuleFileName(NULL, path, MAX_PATH);
printf("Platform: Windows\n");
printf("Compilation Time: %s %s\n", __DATE__, __TIME__);
printf("Compilation File Path: %s\n", path);
#endif
#ifdef __linux__
char real_path[PATH_MAX];
realpath(__FILE__, real_path);
printf("Platform: Linux\n");
printf("Compilation Time: %s %s\n", __DATE__, __TIME__);
printf("Compilation File Path: %s\n", real_path);
#endif
return 0;
}