代码之家  ›  专栏  ›  技术社区  ›  identitycrisisuk

如何在编译时发现环境变量是否存在?

  •  2
  • identitycrisisuk  · 技术社区  · 15 年前

    #if defined( YOUR_NAME ) 它甚至不会为其他人编译,除非他们把它改成 #if defined( YOUR_NAME ) || defined( THEIR_NAME )

    我自己也试过这样做,但它似乎不起作用,重新启动了visualstudio,然后重新启动了计算机,但它似乎仍然没有被接收到。是否有比我了解的更多的黑客行为,或者它需要在visualstudio中选择特定的版本/选项?

    5 回复  |  直到 10 年前
        1
  •  5
  •   James Curran    15 年前

    建立在IanH设置的基础上,使用Visual Studio,

    • 选择属性页
    • 打开配置属性,C/C++,Preprocessor(即VS2008位置,但在VS2005中应该类似)
    • WIN32_调试 ;您的\u NAME=“$(您的\u NAME)”
        2
  •  2
  •   Dmitry    15 年前

    这是一个相当可怕的概念,但如果您真的想这样做,可以在Visual Studio项目设置中指定一个预处理器定义,如下所示: YOUR_NAME=$(USERNAME) %USERNAME% 已定义环境变量。如果您有兴趣从命令行(或在Makefile中)使用它,您可以指定 /DYOUR_NAME=%USER_NAME% 作为 cl.exe .

    附言:即使你所描述的是可能的,你可能想重新考虑这种做法。如果您希望仅在某些情况下启用某些功能,请考虑使用其他一些开关来启用/禁用某些功能,例如:注册表值、配置文件和您认为合理的任何其他标志。这至少可以维持 相同的 continuous integration

        3
  •  1
  •   IanH    15 年前

    编辑:我还没有尝试我的答案,因为我目前在Eclipse/Linux下工作,因此无法测试它,但我认为它应该可以工作(相应的Linux/Eclipse变体工作正常)。


    必须在编译器调用(或build script/Makefile)中将环境变量作为/D%YOUR\u NAME%开关传递。

    为避免%YOUR\u NAME%未定义时出现问题,可以在其前面添加另一个字符串,例如。

    /D NAME_%YOUR_NAME%
    

    #if defined(NAME_identitycrisisuk)
    

    或者不管你的用户名是什么。

        4
  •  0
  •   Billy ONeal IS4    15 年前

    你不能。C预处理器定义与环境变量完全无关。您必须让每个用户都有自己的项目文件,并且每个用户都需要向项目文件本身添加一个附加的define指令,该指令将传递给 cl.exe

        5
  •  0
  •   Bastien Léonard    15 年前

    因此,您需要更改一些设置,以便每个用户都能定义自己的符号。