在多平台 C++ 程序中包含来自平台特定路径的源
Inclusion of sources from platform specific paths in multiplatform C++ program
如何在 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>
您可以使用宏:
#ifdef _WIN32
# define INCLUDE_DIR "C:\Users\......"
#else
# define INCLUDE_DIR "/home/......."
#endif
#include INCLUDE_DIR "someuserlib.h"
但是使用相对路径似乎更正确(如果可能的话)
或直接在构建链中使用包含开关:
g++ -I "C:\Users\..." ..
#include
是一个宏,因此在INCLUDE_DIR变量之前被处理。
但更重要的是,在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>
您可以使用宏:
#ifdef _WIN32
# define INCLUDE_DIR "C:\Users\......"
#else
# define INCLUDE_DIR "/home/......."
#endif
#include INCLUDE_DIR "someuserlib.h"
但是使用相对路径似乎更正确(如果可能的话)
或直接在构建链中使用包含开关:
g++ -I "C:\Users\..." ..
#include
是一个宏,因此在INCLUDE_DIR变量之前被处理。
但更重要的是,在include中不需要设置反斜线,正斜线是所有平台的正确方式。预编译器将在内部处理差异。
从可移植性的角度来看,设置绝对路径也是一个非常糟糕的主意。它应该始终是相对的(基线 可以通过构建标志单独设置)。