2

我的问题是我想组织我的代码,以便我可以拥有相同方法的调试发布版本,并且我可以为不同的目标平台定义相同方法的多个定义。

基本上问题的核心对于两者来说都是相同的,我需要具有相同的签名但关联的定义不同。

在文件系统上组织我的代码以及编译和生产的最佳方法是什么,以便我可以保持干净和分离?

谢谢。

4

3 回答 3

2
// #define DEBUG   -  we're making a non debug version


#ifdef DEBUG

// function definition for debug

#else

// function definition for release

#endif

对于不同的操作系统也可以这样做。当然还有重新编译所有这些的问题,这在 C++ 中可能是一件痛苦的事情。

于 2012-10-04T12:15:43.243 回答
1

我建议您在源代码级别进行干预,而不是对头文件进行干预(只是为了确保保持相同的接口),例如:

//Foo.h

class Foo{
  void methodA();
  void methodB();
};


//Foo.cpp

// common method
Foo::methodA() { }

#ifdef _DEBUG_
  Foo::methodB() { }
#elif _PLATFORM_BAR_
  Foo::methodB() { }
#else
  Foo:methodB() { }
#endif

相反,如果您想将所有内容分开,则必须在更高的水平上工作,预处理器不足以有条件地包含一个 .cpp 文件而不是另一个。您将不得不使用makefile或任何您使用的东西。

另一种选择可能是让源文件在不在特定平台上时简单地消失,例如:

//Foo.h

class Foo{
  void methodA();
  void methodB();
};

//FooCommon.cpp

void Foo::methodA() { }

//FooDebug.cpp
#ifdef _DEBUG_H
void Foo::methodB() { }
#endif

//FooRelease.cpp
#ifndef _DEBUG_H_
void Foo::methodB() { }
#endif
于 2012-10-04T12:20:00.353 回答
1

如果您的编译器允许,您可以尝试将每个版本的源文件保存在单独的子文件夹(例如#include "x86_d/test.h")中,然后使用全局宏定义来控制流程:

#define MODE_DEBUG

#ifdef MODE_DEBUG
#include "x86dbg/test.h"
#else
#include "x86rel/test.h"
#endif

您还可以对成员函数定义使用类似的结构,这样您就可以在同一个文件中拥有两个不同的定义。许多编译器也使用自己的全局宏定义,因此#define MODE_DEBUG您可以使用类似的东西#ifdef _CPP_RELEASE,甚至可以通过编译器标志定义一个。

于 2012-10-04T12:22:14.280 回答