Visual Studio 中的变量使用不同的值多次批量构建相同的代码

Batch building the same code multiple times with different values for a variable in Visual Studio

我需要使用变量 MyVar 构建我的代码。我需要构建它,例如。 10 次,但每次,MyVar 都会不同,例如。

首次构建: static unsigned char MyVar[] = "ABC";

第二次构建: static unsigned char MyVar[] = "XYZ";

是否可以选择以批处理方式执行此操作?例如。命令行?我只是不想手动更改 MyVar,按“构建”,重命名构建的文件等。

非常感谢

PS:我不是专业编码员,这可能是不好的做法。同时我只想把工作做好,不想改动太多代码。

PPS: 已经研究了几件事(属性 工作表、自定义宏、per-/post 构建操作、环境变量)但没有找到合适的东西。

这是一个示例 C++ 程序,它使用名为 MY_MACRO 的宏,您将在调用 MSBuild 之前在 CL environment variable using the /D option 中设置该宏:

#include <iostream>
#include <string>

#ifndef MY_MACRO
#define MY_MACRO "unknown"
#endif

std::string greeting(const std::string& their_name)
{
    static constexpr char my_name[] = MY_MACRO;
    return "Hello, " + their_name + ", nice to meet you!\nMy name is " + my_name + '.';
}

int main()
{
    std::cout << "Please enter your name: ";
    std::string their_name;
    std::cin >> their_name;
    std::cout << greeting(their_name) << '\n';
}

如上述文档中所述,在处理环境变量时,您将使用井号 (#) 而不是等号 (=) 来定义预处理器常量具有明确的价值。此外,在通过命令行定义字符串常量时,double-quotes (") 需要转义(如 \")。

总而言之,这里有一个示例 PowerShell 脚本,用于构建和收集十个不同的可执行文件,每个文件都将使用不同的字符串文字作为从名称列表中选择的 MY_MACRO 的值, 在循环中(请注意,在脚本中,\" 需要在 double-quotes 之前使用反引号表示为 \`",以便 PowerShell 将按字面解释那些 double-quotes inside double-quoted 字符串):

$MSBuildExe = 'C:\Program Files\Microsoft Visual Studio22\Community\MSBuild\Current\Bin\MSBuild.exe'
$MSBuildCmdLineArgs = @('MySolution.sln', '/property:Configuration=Release;Platform=x64', '/target:Rebuild', '/maxCpuCount')

New-Item -Force -ItemType Directory -Name 'CollectedExecutables'

$Names = @('Anni', 'Frida', 'Kadi', 'Mari', 'Piia', 'Pille', 'Piret', 'Reet', 'Siret', 'Triinu')
foreach ($MyNameString in $Names)
{
    $env:CL = "/DMY_MACRO#\`"$MyNameString\`""
    & $MSBuildExe $MSBuildCmdLineArgs "/property:TargetName=executable_named_$MyNameString"
    Copy-Item -LiteralPath "x64\Release\executable_named_${MyNameString}.exe" -Destination 'CollectedExecutables'
}

在此脚本中,我假设您使用的是 Visual Studio 2022;否则只需将 $MSBuildExe 的值更改为适当的路径即可。此外,我假设您想为您的 C++ 项目构建一个 Release(而不是 Debug)配置,并且您想要为x64 平台。如果不是,请相应地更改脚本中的那些字符串。当然,将 C++ 解决方案文件的实际名称(而不是 MySolution.sln)放入脚本中 MSBuild command-line 参数数组的第一个元素中。