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

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

在 VS2013 中是否可以让操作系统环境变量定义一个宏以用于 C++ 代码?

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

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

我想保留实际值,以及是否定义了宏, Visual Studio 项目文件,以便不同的开发人员可以根据自己的感受进行设置而不受影响根据其他开发人员的偏好。我发现的所有内容都说要在项目选项中指定它,但在这种情况下不起作用。

如果有更好的方法来实现我的目标,我愿意接受其他选择!

最佳答案

您确定要在编译时执行此操作吗?即使可能(我不知道是否可行),环境变量也只会存在于开发人员 的机器上,并且只会在该机器上编译时进行处理。一旦将已编译的可执行文件移动到另一台机器,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...
}

关于c++ - 如何将环境变量引入构建以在#ifdef 中使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26349428/

相关文章:

c++ - 对静态变量的更改超出范围? (C++)

c++ - 异步函数错误

c# - 如何将调试器附加到 Windows Azure VM 上运行的应用程序?

java - 扩展 Jenkins/Hudson 插件以设置环境变量对

c++ - 我应该删除 C++ 中的静态对象吗?

c++ - 为什么在动态数组上以特定方式调用 'delete' 不起作用?

C++ 错误 - 架构 x86_64 的 undefined symbol :

asp.net - 索引超出 Microsoft.VisualStudio.Web.PageInspector.Runtime.Tracing.VirtualPathUtilities.MakeAppRelative 错误

c# - AWS Lambda 环境变量和依赖注入(inject)

gradle - 获取 Gradle 'rootProject' 对象以遵守环境变量