首页 > 解决方案 > 视觉工作室不尊重 Windows 批处理文件中的环境变量

问题描述

我在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;
}

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

标签: c++macrosvisual-studio-2019preprocessor-directive

解决方案


推荐阅读