如何在运行时检测C中的操作系统

时间:2016-05-26 20:49:14

标签: c++ c c-preprocessor

我知道这不简单,我已经研究了一段时间,现在我几乎可以肯定没有完全安全的方法。但就是这样。 我正在寻找一种了解运行我的应用程序的操作系统的方法。到目前为止,我得到了这个:

#if defined(__WIN64__) || defined(__WIN64) || defined(WIN64)
    #define NLF_OS_WINDOWS
    #define NLF_OS_64BITS
#elif defined(__WIN32__) || defined(__WIN32) || defined(WIN32)
    #define NLF_OS_WINDOWS
    #define NLF_OS_32BITS
#elif defined(unix) || defined(__unix__) || defined(__unix)
    #define NLF_OS_UNIX
    #if defined(__APPLE__)
        #define NLF_OS_APPLE
        #define NLF_OS_BITS_UNIDENTIFIED
        #include <TargetConditionals.h>
        #if TARGET_OS_IPHONE && TARGET_IPHONE_SIMULATOR
            #define NLF_OS_SIMULATOR
        #elif TARGET_OS_IPHONE
            #define NLF_OS_IPHONE
        #else
            #define NLF_OS_OSX
        #endif
    #elif defined(__linux__) || defined(__linux) || defined(linux)
        #define NLF_OS_LINUX
        #if defined(i386) || defined(__i386) || defined(__i386__)
            #define NLF_OS_32BITS
        #elif defined(amd64)  || defined(__amd64) || defined(__amd64__)
            #define NLF_OS_64BITS
        #endif
    #elif defined(__FreeBSD__) || defined(__FreeBSD) || defined(FreeBSD)
        #define NLF_OS_FREEBSD
        #if defined(i386) || defined(__i386) || defined(__i386__)
            #define NLF_OS_32BITS
        #elif defined(amd64)  || defined(__amd64) || defined(__amd64__)
            #define NLF_OS_64BITS
        #endif
    #endif
#else
    #define NLF_OS_UNIDENTIFIED
    #define NLF_OS_BITS_UNIDENTIFIED
#endif

它已经有所帮助,但它只告诉我在编译应用程序时系统是什么。但是,由于我想交叉编译我正在做的事情,如果我能够向应用程序提供一种知道哪个是当前正在运行的系统的方法,那将非常有用。得到它?

可能我可以使用库sys /“something”(比如sys / types.h和sys / stat.h)做一些丑陋的东西,但我几乎不知道这些东西。

PS:一个C ++解决方案并不是我想要的,但是在这个高度我就在它上面^^“

1 个答案:

答案 0 :(得分:1)

最后回答这个问题。

答案是:你不需要。我注意到了这一点。这些定义已经很好用。如果您正在为另一个平台编译C代码,交叉编译器将负责重新定义de defined,因此如果您使用预处理器指令,系统将始终知道系统是什么。

但是,如果因为某些原因你真的需要它,你就必须做丑陋的事情。比如使用系统(&#34; uname -a&gt; my_file&#34;); ,然后读取my_file内容,然后尝试另一个命令,如果这个不起作用。

主要是,你不需要它=)