Visual studio C++:如何使Windows编译器看不到部分代码?

问题描述 投票:0回答:3

所以我通常有一个基于开源跨平台库的小型 C++ 项目。所以它可能会在linux下编译。因此,当我需要实现一些特定于平台的类函数时,我就达到了这一点。

我有一个包含所有函数声明的类头和包含实现的 cpp 文件。首先:如何在标头中声明我的平台特定函数,这样当我尝试在 Linux 下编译时,它不会尝试编译 Windows 特定函数......并且在 Windows 上编译器不会尝试编译包含标头等的 Linux 函数。

因此对于 Windows,我需要一些如何包装此类超级特定功能

HRESULT EnumerateDevices(REFGUID category, IEnumMoniker **ppEnum)
void DisplayDeviceInformation(IEnumMoniker *pEnum)

还有一些标题

#include <windows.h>
#include <dshow.h>

#pragma comment(lib, "strmiids")

对于linux我有这样的头文件

#include <unistd.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <linux/videodev.h>

我有一个名为

void PrintCamerasList()
的函数,我想要一个用于我单独实现的平台实现。

我希望你能看到我需要的东西。所以一般来说我需要一些使用我的功能的例子,或者一旦你可以发明 - 让你的想象力流动!)

那么为什么我需要这一切 - 我正在使用 OpenCV 创建一些控制台应用程序,我需要列出用户相机名称。 OpenCV 无法自行完成此操作。所以我问如何为我感兴趣的两个平台做到这一点 - windowslinux

c++ linux windows visual-studio
3个回答
3
投票
特定于平台的宏

,并用一些 #ifdef _WIN32 /

#endif
对包围您的 MSVC 特定代码。
    


1
投票
http://predef.sourceforge.net/

,了解各种编译器提供的预定义宏的详细列表,以区分操作系统、编译器和处理器架构。 如有必要,它们将使您不仅能够区分 Win32 和 Linux。


1
投票

#ifdef WIN_32 // Windows stuff... #else // Linux stuff #endif

检查编译器或包含的标头中定义的 windows 标志的确切值

© www.soinside.com 2019 - 2024. All rights reserved.