我有以下代码,其中包含一个基于#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>
。这并没有给我太多希望,但我想知道解决这个问题的正确方法是什么。
答案 0 :(得分: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"
。
答案 1 :(得分: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"