相关疑难解决方法(0)

如何在C预处理器中可靠地检测Mac OS X,iOS,Linux,Windows?

如果有一些跨平台的C/C++代码应该在Mac OS X,iOS,Linux,Windows上编译,我如何在预处理器进程中可靠地检测它们?

c c++ cross-platform c-preprocessor os-detection

291
推荐指数
3
解决办法
14万
查看次数

在Windows和Linux上进行C++编译:ifdef switch

我想在Linux和Windows上运行一些c ++代码.有些代码我只希望包含在一个操作系统中,而不包含在另一个操作系统中.是否有标准的#ifdef可以使用?

就像是:

  #ifdef LINUX_KEY_WORD
    ... // linux code goes here.
  #elif WINDOWS_KEY_WORD
    ... // windows code goes here.
  #else 
  #error "OS not supported!"
  #endif
Run Code Online (Sandbox Code Playgroud)

问题确实是重复的,但这里的答案要好得多,尤其是被接受的答案.

c++ linux windows conditional-compilation ifdefine

161
推荐指数
6
解决办法
17万
查看次数

如何从预处理器宏中识别平台/编译器?

我正在编写一个跨平台的代码,它应该在linux,windows,Mac OS上编译.在窗户上,我必须支持视觉工作室和mingw.

有一些特定于平台的代码,我应该放在#ifdef .. #endif环境中.例如,这里我放置了win32特定代码:

#ifdef WIN32
#include <windows.h>
#endif
Run Code Online (Sandbox Code Playgroud)

但是我如何识别linux和mac OS?我应该使用什么定义名称(或等)?

c++ macros cross-platform c-preprocessor

112
推荐指数
4
解决办法
10万
查看次数

检测CPU架构编译时

在编译C或C++代码时,找出CPU架构最可靠的方法是什么?据我所知,不同的编译器有自己的一套非标准预处理器定义(_M_X86在MSVS中__i386__,__arm__在GCC 中等).

有没有一种标准的方法来检测我正在构建的架构?如果没有,是否有各种编译器的这种定义的综合列表的来源,例如包含所有样板#ifdef的标题?

c c++ cpu-architecture detection compile-time

76
推荐指数
6
解决办法
6万
查看次数

CMAKE中的操作系统特定说明:如何操作?

我是CMAKE的初学者.下面是一个简单的cmake文件,适用于mingw环境窗口.问题显然target_link_libraries()是CMAKE的功能,我链接libwsock32.a.在Windows中这是有效的,我得到了结果.

但是,正如预期的那样,在Linux中,/usr/bin/ld将寻找-lwsock32Linux操作系统中不存在的内容.

我的问题是:我如何指示CMAKE避免在Linux OS中链接wsock32库?

任何帮助将不胜感激.

我的简单CMake文件:

 PROJECT(biourl)
 set (${PROJECT_NAME}_headers ./BioSocketAddress.h  ./BioSocketBase.h ./BioSocketBuffer.h ./BioSocketCommon.h  ./BioSocketListener.h  ./BioSocketPrivate.h  ./BioSocketStream.h ./BioUrl.h BioDatabase.h )

set (${PROJECT_NAME}_sources BioSocketAddress.C  BioSocketBase.C  BioSocketCommon.C BioSocketStream.C  BioUrl.C BioDatabase.C )

add_library(${PROJECT_NAME} STATIC ${${PROJECT_NAME}_headers} ${${PROJECT_NAME}_sources} )

# linkers
#find_library(ws NAMES wsock32 PATHS ${PROJECT_SOURCE_DIR} NO_SYSTEM_ENVIRONMENT_PATH NO_DEFAULT_PATH)

target_link_libraries(${PROJECT_NAME} bioutils wsock32)

install (TARGETS ${PROJECT_NAME}
       RUNTIME DESTINATION bin
       LIBRARY DESTINATION lib
       ARCHIVE DESTINATION lib/archive )
Run Code Online (Sandbox Code Playgroud)

c++ linux portability mingw cmake

74
推荐指数
8
解决办法
7万
查看次数

用C,C++检测Windows或Linux

我正在编写一个跨平台程序.我希望这个程序在Windows和Linux下运行,所以我有两个不同的代码段用于这两个平台.如果操作系统是Windows,我想要运行第一个代码段; 如果它是Linux,那么我希望第二个代码段运行.

所以我编写了以下代码,但在Windows和Linux上构建时都会出错.我该怎么做才能解决它?

#ifdef __unix__                    /* __unix__ is usually defined by compilers targeting Unix systems */

    #define OS_Windows 0
    #include <unistd.h>
    #include <stdlib.h>
    #include <stdio.h>
    #include <string.h>

#elif defined(_WIN32) || defined(WIN32)     /* _Win32 is usually defined by compilers targeting 32 or   64 bit Windows systems */

    #define OS_Windows 1
    #include <windows.h>
    #include <stdio.h>
    #include <tchar.h>
    #define DIV 1048576
    #define WIDTH 7

#endif

int main(int argc, char *argv[])
{
    if(OS_Windows)
    {
        MEMORYSTATUSEX statex;
        statex.dwLength = sizeof (statex);
        GlobalMemoryStatusEx (&statex);

        _tprintf (TEXT("There …
Run Code Online (Sandbox Code Playgroud)

c c++ linux windows

47
推荐指数
4
解决办法
7万
查看次数

39
推荐指数
3
解决办法
4万
查看次数

哪个跨平台预处理器定义?(__ WIN32__或__WIN32或WIN32)?

我常常看到__WIN32,WIN32或者__WIN32__.我认为这取决于使用的预处理器(来自visual studio,或gcc等).

我现在必须首先检查os,然后检查使用过的编译器吗?我们在这里使用G ++ 4.4.x,Visual Studio 2008和Xcode(我假设它是gcc)和我们正在使用的ATM __WIN32__,__APPLE____LINUX__.

c++ macros c-preprocessor

38
推荐指数
2
解决办法
6万
查看次数

宏`__ unix__`未在MacOS X中定义

我注意到在MacOS X(Lion)中,__unix__没有定义宏.由于MacOS源于BSD UNIX,不应该是这样吗?

是否有可能让编译器/预处理器知道我希望它被视为UNIX系统?

unix macos macros

12
推荐指数
2
解决办法
8365
查看次数

使用C/C++代码识别平台linux或windows

我在接受采访时被问到,如何通过提供可运行的C代码来识别平台?

代码必须在两个平台上都可以运行(即没有用于检查的特殊头文件函数)?

c c++ linux windows

9
推荐指数
2
解决办法
3134
查看次数