3

我有以下代码,其中包含一个基于#define'd 变量的库:

#if LIB_SELECTOR==1
#include "path/to/lib1.h"
#else
#include "path/to/lib2.h"
#endif

但是,这个库需要包含在许多源文件中,并且在所有源文件中维护这个条件可能会出现问题并且容易出错。理想情况下,我会简单地做类似的事情:

#if LIB_SELECTOR==1
#define DYNAMIC_LIB "path/to/lib1.h"
#else
#define DYNAMIC_LIB "path/to/lib2.h"
#endif

然后,在所有必需的源文件中,只需使用

#include DYNAMIC_LIB

我已经在我的代码中尝试过,并收到错误error: #include expects "FILENAME" or <FILENAME>。这并没有给我太多希望,但我想知道解决这个问题的正确方法是什么。

4

2 回答 2

3

您所拥有的应该可以工作,但是#include DYNAMIC_LIB必须DYNAMIC_LIB首先定义使用的文件。在失败的源文件上,您可以使用以下方法进行测试:

#ifndef DYNAMIC_LIB
#error "DYNAMIC_LIB is not defined!"
#endif
#include DYNAMIC_LIB

您不必在所有源文件中维护该条件。您可以创建一个具有条件的头文件,并让您的其他源文件包含该文件。例如:

/* lib_selector.h */
#pragma once
#if LIB_SELECTOR==1
#include "path/to/lib1.h"
#else
#include "path/to/lib2.h"
#endif

然后所有其他源文件将#include "lib_selector.h".

于 2013-07-26T00:50:15.637 回答
2

您可以将代码放入头文件中,然后在任何地方都包含该头文件。

// CommonHeaders.h

#ifndef __COMMONHEADERS_H__
#define __COMMONHEADERS_H__

#if LIB_SELECTOR==1
#include "path/to/lib1.h"
#else
#include "path/to/lib2.h"
#endif

#endif // __COMMONHEADERS_H__

// 您的许多其他 .h/.cpp 文件

#include "path/to/CommonHeaders.h"
于 2013-07-26T00:55:32.993 回答