如何将环境变量引入构建以在#ifdef中使用

时间:2014-10-13 21:49:37

标签: c++ visual-studio-2013 environment-variables conditional-compilation

是否可以让OS环境变量定义一个宏,以便在VS2013中使用C ++代码?

例如,我希望设置环境变量DEV_LOG_DIRECTORY,并在我的C ++源文件中执行以下操作:

#ifdef DEV_LOG_DIRECTORY
    logging::set_dir(DEV_LOG_DIRECTORY)
#endif

我想保留实际值,以及是否定义宏,Visual Studio项目文件的 out ,以便不同的开发人员可以设置它们的感觉并且不受影响由其他开发者的偏好。我发现的所有内容都说明在项目选项中指定了这一点,但在这种情况下不会起作用。

如果有更好的方法来实现我的目标,我可以选择其他方式!

1 个答案:

答案 0 :(得分:2)

您确定要在编译时执行此操作吗?即使它是可能的(我不知道它是否可能),环境变量只存在于开发人员的机器上,并且只有在该机器上进行编译时才会被处理。将已编译的可执行文件移动到另一台计算机后,set_dir()值将被硬编码到应用程序中,但实际目标文件夹可能不会存在于当前计算机上。您可能希望从应用程序实际运行的操作系统中读取环境变量,然后在定义时使用它,例如:

char LogDir[32767] = {0};
if (GetEnvironmentVariableA("LOG_DIRECTORY", LogDir, _countof(LogDir)) > 0)
{
    logging::set_dir(LogDir);
}
else if (GetLastError() != ERROR_ENVVAR_NOT_FOUND)
{
    // error reading the environment variable...
}