如何在没有指令ifdef的情况下检测操作系统

How to detect OS without directive ifdef?

本文关键字:情况下 检测 操作系统 ifdef 指令      更新时间:2024-04-28

我必须在Linux或Windows上重置系统日期和时间。如何在不使用ifdefif defined的情况下检查操作系统?

使用CMake,可以通过使用生成器表达式有条件地将文件添加到目标中。这样,您就可以在文件中隔离任何特定于平台的代码,并在构建规范中使用它们,如下所示。

add_executable(reset-time
$<$<PLATFORM_ID:Darwin>:resettime-macos.cpp>
$<$<PLATFORM_ID:Linux>:resettime-linux.cpp>
$<$<PLATFORM_ID:Windows>:resettime-windows.cpp>)

正如@eeroika在评论中指出的那样,是一个很好的选择

add_executable(reset-time
resettime-$<LOWER_CASE:${CMAKE_SYSTEM_NAME}>.cpp)

因为在将您的项目移植到新系统时,不需要调整(CMakeLists.txt(,并且您可以更早地捕获丢失的实现文件,即在链接之前。

您可以根据要编译的操作系统为编译器设置全局宏定义。例如-D IS_WINDOWS=1。然后可以使用#if IS_WINDOWS而不是#ifdef。我不知道为什么这会有用,但它达到了你的要求。