组织跨平台 C/C++ 项目 [关闭]

Posted

技术标签:

【中文标题】组织跨平台 C/C++ 项目 [关闭]【英文标题】:Organize cross-platform C/C++ project [closed] 【发布时间】:2011-09-06 20:35:51 【问题描述】:

如何组织多平台(Windows、Linux)C/C++ 库项目的常用/推荐方式是什么?

如何命名函数并提供依赖于操作系统的实现、组织包含等?拜托,只有建设性的想法——没有“看看 Linux”的指针,ideas strongly welcome

【问题讨论】:

对此没有任何规定。不同的人出于各种原因做不同的事情。 然后重新检查faq。这个网站不适合回答每个答案都同样有效(主观)的问题。 看Linux不会太好,因为它不是多平台的,也不是普通的应用程序。不过,查看 SDL 可能会有所帮助。 但是,我强烈建议在一些优秀的跨平台库之上构建,这些库可以为您完成困难的跨平台工作,因此您可以编写自己的代码以尽可能与平台无关。 这可能更适合programmers.stackexchange.com。 【参考方案1】:

这很大程度上取决于您使用的构建系统。许多跨平台构建系统都有自己的组织方式。

至于代码本身,提供头文件并不少见,但链接到给定系统的实现文件,所以你可能有:

system.h
system_linux.cpp
system_windows.cpp
system_osx.cpp
...

...用于收集与操作系统相关的内容。

但总而言之,最好的方法是实际查看一些(小于 Linux 的)多平台项目:P。

【讨论】:

【参考方案2】:

我使用文件夹来放置依赖的头文件/源文件,如本例所示

fs/filesystem.hpp

fs/linux/filesystem.hpp

fs/windows/filesystem.hpp

fs/linux/filesystem.cpp

fs/windows/filesystem.cpp

然后在我的构建系统中,很容易使用“$target”来包含每个操作系统的相关源文件以进行构建。

诀窍是创建一个您可以 typedef 并隐藏用户的接口,以便他们只看到这个而不是实现细节

我个人讨厌在类定义、类型、标题等中散布多个 OS #ifdef 的源文件,为了清晰和易于阅读,我更喜欢将所有内容分段。

【讨论】:

【参考方案3】:

CMake 是适用于许多平台的优秀元构建系统。 Boost 适用于大多数平台。 Qt也很不错。

尽量减少依赖的数量。

CMake 让您以某种与平台无关的方式提出有关平台的问题。 Boost 和 Qt 将平台抽象化,因此您不必关心(尽可能多地)。

【讨论】:

+1 用于使用 Boost 和 Qt 抽象出平台。我几乎不再需要使用 Windows 或 Unix API。【参考方案4】:

我使用的方法是将所有特定于操作系统的功能包装到我自己的界面中。然后我为每个不同的操作系统(主要是 Windows 和 Linux)实现这个接口。

在编译时,我使用预处理器检查它是哪个平台,然后包含适当的版本。

我经常用线程、磁盘 I/O 和时钟/时间来做这件事。

例如:

#ifdef _WIN32

#include <windows.h>
#include "windows_code.h"

#elif __linux

#include <unistd.h>
#include <pthread.h>
#include "linux_code.h"

#else
#error "Unrecognized Platform"
#endif

【讨论】:

以上是关于组织跨平台 C/C++ 项目 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

用于 C++ 的开源、跨平台 CD/DVD 录制库 [关闭]

跨平台调试的 C/C++ 语言项目

跨平台调试的 C/C++ 语言项目

跨平台调试的 C/C++ 语言项目

不同平台的C/C++标准库

不同平台的C/C++标准库