CMakeLists.txt中时间字符串处理:自动设置两个月后过期日期
在CMakeLists.txt中生成两个月后的过期日期
CMake本身没有内置的日期运算能力,得借助系统自带的命令行工具实现,下面是跨平台的实用方案:
Unix-like系统(Linux/macOS)
利用date命令直接计算相对日期,支持自定义输出格式。通过CMake的execute_process调用命令,把结果存到变量里:
# 获取两个月后的日期(格式可自行调整,比如%Y%m%d、%Y-%m-%d %H:%M:%S等) execute_process( COMMAND date -d "+2 months" +"%Y-%m-%d" OUTPUT_VARIABLE EXPIRY_DATE OUTPUT_STRIP_TRAILING_WHITESPACE # 去除输出末尾的换行符 ) # 验证结果 message(STATUS "过期日期: ${EXPIRY_DATE}")
如果需要Unix时间戳(整数格式),把命令改成:
execute_process( COMMAND date -d "+2 months" +"%s" OUTPUT_VARIABLE EXPIRY_TIMESTAMP OUTPUT_STRIP_TRAILING_WHITESPACE ) message(STATUS "过期时间戳: ${EXPIRY_TIMESTAMP}")
Windows系统
用PowerShell的日期计算能力实现,同样通过execute_process调用:
# 获取两个月后的日期 execute_process( COMMAND powershell -Command "(Get-Date).AddMonths(2).ToString('yyyy-MM-dd')" OUTPUT_VARIABLE EXPIRY_DATE OUTPUT_STRIP_TRAILING_WHITESPACE ) message(STATUS "过期日期: ${EXPIRY_DATE}")
如果需要Unix时间戳:
execute_process( COMMAND powershell -Command "[math]::Floor((Get-Date).AddMonths(2).ToUniversalTime() - (Get-Date '1970-01-01').ToUniversalTime() | Select-Object -ExpandProperty TotalSeconds)" OUTPUT_VARIABLE EXPIRY_TIMESTAMP OUTPUT_STRIP_TRAILING_WHITESPACE ) message(STATUS "过期时间戳: ${EXPIRY_TIMESTAMP}")
跨平台兼容写法
通过CMAKE_HOST_SYSTEM_NAME判断当前系统,自动选择对应的命令:
if(CMAKE_HOST_SYSTEM_NAME STREQUAL "Windows") # Windows下获取日期 execute_process( COMMAND powershell -Command "(Get-Date).AddMonths(2).ToString('yyyy-MM-dd')" OUTPUT_VARIABLE EXPIRY_DATE OUTPUT_STRIP_TRAILING_WHITESPACE ) else() # Unix-like系统下获取日期 execute_process( COMMAND date -d "+2 months" +"%Y-%m-%d" OUTPUT_VARIABLE EXPIRY_DATE OUTPUT_STRIP_TRAILING_WHITESPACE ) endif() # 可以把变量写入头文件供代码使用 configure_file( ${CMAKE_SOURCE_DIR}/config.h.in ${CMAKE_BINARY_DIR}/config.h @ONLY )
注:日期格式可以根据需求自由调整,比如%Y%m%d(无分隔符的年月日)、%Y-%m-%d %H:%M:%S(带时分秒的完整时间)等。
内容的提问来源于stack exchange,提问作者Asker
相关产品推荐
相关产品推荐

