我在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值不变。