在多平台C ++程序中包含来自平台特定路径的源

时间:2015-04-15 10:52:17

标签: c++ include

如何在C ++中包含来自平台特定路径的多个源? 我试着做以下

#include <string>

using namespace std;

#ifdef _WIN32

static const string INCLUDE_DIR = "C:\\Users\\......";

#else

static const string INCLUDE_DIR = "/home/.......";

#endif

#include INCLUDE_DIR + "someuserlib.h"

但它说#include expects "FILENAME" or <FILENAME>

2 个答案:

答案 0 :(得分:3)

您可以使用MACRO:

#ifdef _WIN32
# define INCLUDE_DIR "C:\\Users\\......"
#else
# define INCLUDE_DIR "/home/......."
#endif

#include INCLUDE_DIR "someuserlib.h"

<击> 但是使用相对路径(如果可能)似乎更正确

或直接在构建链中使用include开关:

g++ -I "C:\\Users\\..." ..

答案 1 :(得分:2)

#include是一个宏,因此在INCLUDE_DIR变量之前处理。

但更重要的是,没有必要在include中设置反斜杠,正斜杠是所有平台的正确方法。预编译器将在内部处理差异。

从可移植性的角度来看,设置绝对路径也是一个非常糟糕的主意。它应该始终是相对的( baseline 可以通过构建标志单独设置)。