Visual Studio不尊重Windows批处理文件中的环境变量

时间:2019-08-23 02:00:32

标签: c++ macros visual-studio-2019 preprocessor-directive

我在Visual Studios 2019中有一个C ++项目。我想实现条件编译。为此,在Windows .bat(launch_solution.bat)文件中定义了一个版本,并从同一bat文件启动了Visual Studio项目。我在宏中读取了此变量的值,然后尝试进行条件编译。当我启动.bat文件时,这似乎是第一次工作。但是,当我关闭Visual Studio时,请更改变量的值,然后再次启动bat文件,该文件将不起作用。

这是我的launch_solution.bat的样子。

设置/ A CODE_VER = 1
“ C:\ Program Files(x86)\ Microsoft Visual Studio \ 2019 \ Professional \ Common7 \ IDE \ devenv.exe”“ C:\ Users \ dnaik \ Work_Projects \ Macros_Built \ Macros_Built.vcxproj”

在Visual Studio中,在C ++-> Preprocessor-> Preprocessor Definitions下,我定义了一个宏:VER = $(CODE_VER)

我更改bat文件中的CODE_VER值并执行批处理文件以启动Visual Studio,然后针对不同版本的代码进行编译。

// This is the header file 
#ifndef _COMMONUTILITY_H_
#define _COMMONUTILITY_H_

#if VER==1
#define ADDITION
#elif VER==2
#define MULTIPLICATION
#else
#define SUBTRACT
#endif

#endif



// This is the src file
#include <iostream>
#include <vector>
#include "CommonUtility.h"

int main()
{
    std::vector<int> zVec = { 1,2,3,4,5 };

#ifdef  ADDITION
    int iResult = 0;
    for (int i = 0; i < zVec.size(); i++)
    {
        iResult += zVec[i];
    }
    std::cout << iResult << std::endl;

#endif //  ADDITION


#ifdef MULTIPLICATION
    long iMultResult = 1;

    for (int i = 0; i < zVec.size(); i++)
    {
        iMultResult *= zVec[i];
    }

    std::cout << iMultResult << std::endl;

#endif // MULTIPLICATION


#ifdef SUBTRACT
    int iSubtractResult = 0;

    for (int i = 0; i < zVec.size(); i++)
    {
        iSubtractResult -= zVec[i];
    }
    std::cout << iSubtractResult << std::endl;

#endif // SUBTRACT

    return 0;
}

当我第一次从批处理文件启动Visual Studio时,条件编译将按预期工作。但是,当我更改CODE_VER值并再次启动Visual Studio时,VER值不变。

0 个答案:

没有答案