0

我目前有两个 c++ 项目,它们共享许多相同的源文件和头文件。其中一个是游戏服务器,另一个是客户端。我的一些类具有客户端或服务器独有的功能,因此只能为其中之一编译。但是,我不确定该怎么做。到目前为止,我的尝试是:

  1. 在Client.h #define IS_CLIENT(包括 main 函数)和#define IS_SERVERServer.h 中使用。这失败了,因为其他头文件必须使用#include它们(所以当我想编译某些东西时,我最终不得不修改所有头文件)

  2. 使用#include "CompileType.h"where CompileType.h 定义 IS_CLIENT 或 IS_SERVER。这是与以前的方法不同的一项重大改进,但仍然让我在想要编译时更改文件。

两种尝试都使用#ifdef#endif围绕 .cpp 文件中的选择函数定义。

如果可能的话,一个可能的解决方案是#define在全球范围内(因此它会影响所有源文件和头文件)。我的 IDE (Code::Blocks) 设置中可能还有一些我还没有看到的东西。

对此问题的任何见解将不胜感激。

4

2 回答 2

1

最好的方法是完全分离你的功能,这样所有的“服务器”功能都在一个或多个只用于服务器的文件中,而你的所有“客户端”都在它自己的文件中。所以,基本上,你有三个目录,一个是“服务器”文件,一个是“客户端”文件,一个是“普通”文件。

不应该在源文件中使用#ifor ,除非解决这个问题的努力真的非常巨大。#ifdef

于 2013-02-02T23:08:28.350 回答
0

对于我从事的一个项目,我们有一个具有核心功能和几个可选模块的程序。然后,属于一个模块的每个文件都写在一些#ifdef MODULENAME / #endif块中,然后可以通过MODULENAME在项目规模上定义来决定编译哪个模块(在带有属性表的 Visual Studio 中,但代码块有一些等价物)。并且在磁盘上,每个模块文件都位于不同的文件夹中,这样它就不会变得太乱,这个解决方案也可以为你工作。

于 2013-02-03T00:08:02.427 回答