如何配置项目以生成与平台无关的代码?

时间:2009-06-14 20:00:32

标签: c++ cross-platform

我正在编写一个应用程序,我想在Mac,Windows和Linux上发布二进制文件。我有在Mac和Linux下编译的代码,但在Windows下,它没有。

这是因为Windows缺少strcasecmp。我已经阅读了一些关于如何创建某种标题来包装我的代码的内容,但我并不太了解这个概念。我只使用vim和make来处理我的Mac上的代码,但现在我正在尝试将它全部切换到Visual Studio。

当我在Windows上构建时,是否有某种方法可以将我的项目设置为包含Windows包装器标头,但是当我在Mac或Linux机器上构建时,省略它们?

这个问题让我头疼,我很感激任何建议!

4 个答案:

答案 0 :(得分:7)

你可以做到

#ifdef WIN32
#include <windows_specific_header.h>
#else
#include <other_header.h>

还有一个特定于MS Visual Studio的宏:_MSC_VER,所以

#ifdef _MSC_VER

也可以在这里工作。

在windows.h中还有WINVER定义。

答案 1 :(得分:1)

  

配置我的项目以生成与平台无关的代码

这是一个奇怪的阶段,所以我不确定我是在回答正确的问题,但是这里有:

您必须编写与平台无关的代码。

做其中一项:

  • 写入跨平台框架(即QT)
  • 仅使用所有目标上可用的库函数

  • 提供包装以填补库(或更多)目标
  • 中的任何空白

答案 2 :(得分:1)

Boost库旨在实现跨平台。特别是,如果你需要操纵字符串,你可能会找到你需要的东西。它将是跨平台的,而不必自己处理它。请参阅there以了解可用的内容。

答案 3 :(得分:0)

也许您可以考虑在Windows上使用MINGW32编译代码。