如何在不同的平台上拥有不同的标题?

时间:2014-01-07 17:46:51

标签: c++

我是C ++的新手,我有一个文件,我必须在Linux和Windows中构建。

我想知道是否有一种方法可以在Windows和Linux的同一个文件中使用不同的#include列表,但不知怎的,我告诉它这样做,而不必每次都修改文件。

像:

if_Windows
    #include <Include1>
if_Linux
    #include <Include2>

有可能做这样的事吗?你是怎么做到的?

5 个答案:

答案 0 :(得分:2)

您可以定义在编译Windows和Linux时设置的宏。

#define MYPROJECT_CONFIG_WINDOWS_PLATFORM

#if defined(MYPROJECT_CONFIG_WINDOWS_PLATFORM)
    #include <include1>
#elif defined(MYPROJECT_CONFIG_LINUX_PLATFORM)
    #include <include2>
#else
    #error link: no suitable library
#endif

然后你要做的就是在为Linux编译时定义MYPROJECT_CONFIG_WINDOWS_PLATFORM,在为Linux编译时定义MYPROJECT_CONFIG_LINUX_PLATFORM

某些IDE还为他们正在编译的平台预设了宏(如Windows的WIN32),但您必须检查它们的文档。

答案 1 :(得分:2)

您需要将#ifdef与适当的宏结合使用。例如

#ifdef WIN32
 // Windows includes
#elseif __unix__
 // Unix included
#endif

您需要检查编译器文档,以了解它们为相应平台定义的内容。

答案 2 :(得分:2)

使用#if预处理程序指令:

#if defined(WIN32)
#include <foo_w.h>
#else
#include <foo_l.h>
#endif

哪个定义用于哪个平台有点复杂,通常你的编译器上有一些文档。

答案 3 :(得分:0)

您需要使用预处理器。

请参阅http://www.cplusplus.com/doc/tutorial/preprocessor/

定义了变量,使用#ifdef等,您可以为特定平台添加正确的内容

答案 4 :(得分:0)

我首选的方法是

#include <myheader.h>

并使用编译器的包含路径来包含来自不同系统上不同文件夹的标头。


另一种方法是使用平台和可能特定于编译器的预处理器符号来有条件地包含不同的头,例如

#ifdef _WIN32
#    include <myheader.windows.h>
#else
#    include <myheader.nix.h>
#endif

其中 _WIN32 由编译器在32位和64位Windows平台中定义(请注意,这不是一个标准的标准,只是事实上的标准)。


最后,第三,这种条件文本包含可以用来让同一个文件在不同的系统上提供不同的源代码。