如何在没有指令ifdef的情况下检测操作系统
How to detect OS without directive ifdef?
我必须在Linux或Windows上重置系统日期和时间。如何在不使用ifdef
或if 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
。我不知道为什么这会有用,但它达到了你的要求。
相关文章:
- 在没有太多条件句的情况下,我如何避免被零除
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 在未初始化映射的情况下,将值插入到映射的映射中
- 是默认情况下分配给char数组常量的值
- 为什么我不能在不创建字符串变量的情况下使用函数的字符串输出
- 如何在不产生任何垃圾的情况下获得C中的像素
- 在已经使用Git的情况下减少编译时间
- 为什么在Windows上的VS 2019和Clang 9中"size_t"在没有标题的情况下工作
- 如何在没有信号的情况下从C++执行QML插槽
- 如何在不知道向量大小的情况下输入向量内部的向量?
- 为什么在某些情况下不写入此文件?
- 为什么Mat类的两个对象可以在不重载运算符+的情况下添加
- 在没有Xcode的情况下在Mac捆绑包中嵌入框架
- 在不使用经过训练的模型的情况下检测/分割面部和面部特征:openCV C++
- 为什么默认情况下使用 [ ] 运算符访问超出范围的矢量元素时,C++检测?
- Qt-如何在不使用插槽的情况下检测自定义事件循环中的关闭窗口
- 在不轮询GetMessage()的情况下检测USB连接/断开连接
- C++-如何检测我在没有终端的情况下运行
- 在没有SDL或GLUT的情况下检测按键的最佳方法
- 在不使用文字的情况下检测负数的更好方法是什么?