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

3
我正在编写一款应用程序,希望在Mac、Windows和Linux上发布二进制文件。我的代码可以在Mac和Linux下编译,但是在Windows下无法编译。
这是因为Windows缺少strcasecmp函数。我已经了解到可以创建某种头文件来包装我的代码,但我并不太理解这个概念。我之前在Mac上使用vim和make工具开发代码,但现在我想把它全部转移到Visual Studio上。
有没有办法在Windows上构建时包含Windows封装头文件,在Mac或Linux上构建时则省略它们?
这个问题真的让我很头痛,我会非常感谢任何建议!
4个回答

7

您可以这样做

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

还有一个特定于MS Visual Studio的宏:_MSC_VER,因此

#ifdef _MSC_VER

这里也可以使用WINVER定义(define)。

在windows.h中也有WINVER定义(define)。


WIN32是编译器定义的符号还是我需要自己定义的东西? - samoz
这是一个编译器定义的符号。 - PaV
1
在使用WIN32时需要小心,因为有些编译器可能会认为它是Windows的。例如,在为模拟器编译Symbian代码时,即使没有可用的Windows头文件或库,也可能是真实的。如果您的平台只是win / linux / mac,则不会影响您,但对于旨在极度可移植的代码可能很重要。 - Steve Jessop
在Windows下,Netbeans中是否出现WIN32? - samoz

1
配置我的项目以生成平台无关的代码。
这是一个有点奇怪的阶段,所以我不确定我是否回答了正确的问题,但是让我来试试:
您必须编写平台无关的代码。
做以下之一:
- 编写跨平台框架(例如QT)。 - 仅使用在所有目标上都可用的库函数。
或者
- 提供包装器以填补库中任何目标上的差距。

大部分我需要的字符串函数Windows没有提供。相反,它们提供了这些函数,但使用不同的名称,因此Windows编译器无法找到与Mac或Linux相同的函数。 - samoz

1

Boost 库旨在跨平台使用。特别是,如果您需要操作字符串,您可能会找到所需的内容。而且,它将是跨平台的,无需自己处理。请参见这里以了解可用内容。


0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接