c++ - 视觉工作室不尊重 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 值不会改变。
解决方案
推荐阅读
- excel - 如何转到上一个单元格并使此代码更快?
- python - 对数组的特定索引求和以获得另一个数组
- c# - 以 xamarin 形式从 base64 下载文件
- powershell - 将一个目录中的多个文件合并为一个文件
- kubernetes - kubernetes 部署/副本集在删除后重新创建
- python - python 词法分析器仅附加到数组的第一个关键字
- python - 使用 Selenium 和 Python 进行重复搜索。给我那些他们没有结果的
- python - pycurl.multicurl - 无法得到我返回的结果,只有对象内存地址
- google-cloud-dataflow - 将 PubSub 流式传输到 Spanner - Wait.on 步骤
- python - 如何找到基于权重的自定义平均值,包括处理熊猫中的nan值?