如何在不同的平台上使用不同的标头
How to have different Headers in different platforms?
我对C++很陌生,我有一个文件,我必须在Linux和Windows中构建。
我想知道是否有一种方法可以在同一个文件中为 Windows 和 Linux 提供不同的 #include 列表,但不知何故,我告诉它这样做而不必每次都修改文件。
喜欢:
if_Windows
#include <Include1>
if_Linux
#include <Include2>
有可能做这样的事情吗?你是怎么做到的?
您可以定义在为 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
然后,您所要做的就是在为 Window 编译时定义MYPROJECT_CONFIG_WINDOWS_PLATFORM
,在为 Linux 编译时定义MYPROJECT_CONFIG_LINUX_PLATFORM
。
一些 IDE 还为它们正在编译的平台(如 Windows WIN32
)提供了预设宏,但您必须查看它们的文档。
将#ifdef
与适合您的环境的宏结合使用。例如
#ifdef WIN32
// Windows includes
#elseif __unix__
// Unix included
#endif
您需要检查编译器文档,了解它们为相应平台定义了什么。
使用 #if
预处理器指令:
#if defined(WIN32)
#include <foo_w.h>
#else
#include <foo_l.h>
#endif
哪个定义使用哪个平台有点复杂,通常您的编译器有一些文档。
您需要使用预处理器。
见 http://www.cplusplus.com/doc/tutorial/preprocessor/
变量是定义的,通过使用#ifdef
等,您可以为特定平台包含正确的内容
我的首选方法是
#include <myheader.h>
并使用编译器的包含路径来包含来自不同系统上不同文件夹的标头。
另一种方法是使用特定于平台和可能特定于编译器的预处理器符号来有条件地包含不同的标头,例如
#ifdef _WIN32
# include <myheader.windows.h>
#else
# include <myheader.nix.h>
#endif
其中_WIN32
由编译器在 32 位和 64 位 Windows 平台中定义(请注意,这不是官方标准,只是事实标准)。
最后,第三,这种条件文本包含可用于让同一文件在不同的系统上提供不同的源代码。
- 正在查找文档以获得PS4平台的C++中的设备信息
- C/C++ - 查询平台相关的换行符(用于内存映射文件)
- 如何基于平台在制作文件中制作if语句?
- 在 Linux 平台的 C++ 中动态加载 DLL
- 无法使用 aarch64-unknown-nto-qnx7.0.0-g++-5.4.0 编译器交叉编译 QNX 平台的
- 如何判断类型双关语在我的平台上是否可以?
- 如何使用可视化代码和平台IO将环境变量注入CPP文件?
- 如何实现具有多个平台__FILE__和__LINE__信息的 C/C++ 可变参数日志记录宏?
- 操作系统平台支持宏和提升库
- 平台游戏 - 下车时避免与平台碰撞
- NPM 安装:找不到平台工具集 = v141
- 如何在 64 位平台上计算 32 位哈希C++?
- 我的代码在不同的平台上给出不同的输出
- 是否有任何 2 补充平台/编译器,其中有符号移位不做通常的事情?
- 哪些 C++ 数据类型是 Metal 和所有其他 C++ 平台共有的
- 如何创建独立于平台的宏来包装编译器扩展?
- 多平台库设计.最佳实践
- 如何在linux平台上表达openGL glDebugOutput / glDebugMessageCallback
- 将vector<vector<double>>从x86平台中创建的一个进程发送到x64中构建的另一个进程的最快方法是什么
- 构建在VS 2013中找不到平台工具集= 'v141'