【问题标题】:How to check existence of environment variables at compile time in Visual Studio 2017 C++?如何在 Visual Studio 2017 C++ 编译时检查环境变量是否存在?
【发布时间】:2019-01-24 08:27:38
【问题描述】:

我想在编译时检查环境变量是否存在,但我找不到方法。

原因是代码的可维护性:我使用 QT 并创建了一个指向根安装目录的环境变量,用于引用头文件和库。 所以几年后,当我或我的同事检查项目并尝试编译它时,我想抛出一个自定义的综合错误消息,类似于please install QT version XYZ and create environment variable QT_PATH to point at the root directory

我知道自述文件是执行此操作的正确方法,并且我也在创建该文件,但我仍然想知道通常是否可以在编译时检查环境变量的存在。

到目前为止,我得到的最接近的方法是使用预处理器定义 QT_INSTALLATION_PATH=$(QT_PATH); 并检查它

#if QT_INSTALLATION_PATH == '\0'
#error "..."
#endif

如果 QT_PATH 不存在会抛出 expression expected 错误,如果存在则可以正常工作。

【问题讨论】:

  • 您是否尝试在其他编译器/链接器标志中添加对此环境变量的引用?
  • 不,我该怎么做?
  • 最好避免使用环境变量。
  • “在编译时检查环境变量是否存在”,它将在构建时,在您的工具链中。
  • 编译只是编译的过程,构建是整个过程,从某些情况下的VS解决方案生成到链接。

标签: c++ visual-studio environment-variables compile-time


【解决方案1】:

这样做的正确方法是使用 Visual Studio 生成器,它会在编译之前为您执行这些检查。

例如,CMake 做得非常好,可以选择特定版本的 Qt 或 OpenCV。 Qt 本身带有 QMake,但我建议你瞄准一个通用的生成器(不确定 QMake 是否支持 OpenCV),即 CMake。

【讨论】:

  • 我想在 Visual Studio 中进行。如果 CMake 在我有 VS 项目文件之前告诉我这件事,那不是我要找的,因为我希望 VS 告诉我。
  • 这就是重点,CMake 将为您的 VS 版本生成正确的 VS 解决方案(不要忘记,几年后,您的新用户将不得不迁移解决方案,从而导致大量如果您不提供重新生成它的方法,那么会很痛苦)使用用户拥有的 Qt 和 OpenCV 版本。这就是它的完成方式。您想要做的是 hack,这不是您正确进行这些检查的方式。
  • Cmake 并不是公司工具链的一部分,所以我也会尝试寻找替代答案,但无论如何感谢。顺便说一句,被否决的不是我。
  • 在这种情况下,请尝试使用 QMake。如果你有 Qt,那么你就有 QMake。您可能需要将等效的 FindOpenCV 从 CMake 移植到 QMake 以进行类似的检查。
猜你喜欢
  • 2012-04-28
  • 2023-03-20
  • 1970-01-01
  • 1970-01-01
  • 2011-01-21
  • 2013-08-12
  • 2017-04-26
  • 2017-08-06
  • 2019-08-27
相关资源
最近更新 更多