Visual Studio 添加真正的“全局”默认包含路径

8
有没有一种简单的方法能够在Visual Studio中为所有用户(全局)添加路径到包含/库目录集?我想要的是安全地为所有项目(过去和未来)添加一个包含/库路径到Visual Studio。这相当于INCLUDE、LIB和LIBPATH环境变量,似乎适用于命令行构建,但由于某些原因,在通过Visual Studio构建时完全被忽略了。它必须应用于机器上的所有用户。
我不希望更改特定用户的MSBuild属性表Microsoft.Cpp.Win32.user.props,因为这只会为特定用户在特定机器上添加路径。虽然这似乎是实现“全局”设置的推荐方式,但它无法应用于我的用例:
我参与教授一门面向工程师的编程入门课程,每年大约有1000名学生。我们为他们配备了计算机实验室,以便完成每周实验测验,但是每次学生注销时,个人设置和文档都会被清空(因此我们不能依赖用户属性)。作为课程的一部分,他们需要使用自定义课程库与硬件单元进行交互(因此需要添加包含路径和库路径)。手动为每个项目添加路径超出了我们所教授的内容,并且在学期内他们将每周创建多个项目,这将变得很烦琐。
我们尝试过的方法:
  • 将所需的头文件/库安装到Windows SDK路径中。
    这绝对不是理想的做法,每当Windows SDK更新到新版本时就会出现问题。
  • 将所需的头文件/库安装到Visual Studio的Auxiliary路径中。
    通过检查默认的VC++包含目录,似乎VS2017在搜索头文件和库时包括了路径C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\VS。根据文档,该文件夹应该用于不真正属于编译过程的工具。这是我们目前所做的,但感觉不正确,并且文件夹位置已经在过去的Visual Studio版本中更改过,所以将来可能会更改(由于此原因,我们在过去的5年中一直使用VS2012)。我们还必须在实验室更新Visual Studio时重新安装库。

我们可以尝试的方法:

  • 将路径添加到工具集默认属性表中。
    在各种论坛中,建议使用用户属性表(例如here),而不是推荐使用默认属性表。这些属性表本身警告不要修改它们,因为担心每当工具集更新时它们会被重置,如果在升级VS时安装了新的工具集,我们将不得不重新修改该工具集的默认表。
  • 创建一个带有所需设置的项目模板。
    我们可以创建一个模板,学生应该在通过新项目向导创建他们的新项目时选择它。担心的是,如果学生使用错误的模板创建项目(这在这样规模的课程中不可避免地经常发生),并开始进行其测验任务而没有正确设置环境,则处理出现的问题将是一场噩梦,因为我们的员工数量有限。此外,模板是VS版本特定的(并放置在版本特定的文件夹中),因此每次更改Visual Studio版本时,我们都必须重新安装模板。
整个想法是为了使我们的工作流程具有未来性。我们想要做的非常简单:将一个头文件和一个库添加到默认搜索路径中,它应该可以与安装在机器上的任何版本的Visual Studio一起使用。在任何其他系统/IDE上,这都是一个微不足道的任务。命令行MSBuild甚至通过环境变量支持它。但由于某种原因,我们无法在Visual Studio中找到一个简单的解决方案。
有没有更好的想法?

在我看来,“安全”和“适用于所有项目(过去和未来)”似乎是难以协调的目标。 - François Andrieux
2
我不这么认为。头文件/库是标准的C89,与任何特定于Windows的内容无关。所谓“安全”,是指不会在下次IT更新Visual Studio时出现问题,并且符合Visual Studio支持的内容。所谓“未来”,是指我们可以在未来的几个学期内忽略它。 - Antonio Sanchez
你能不能把 Directory.Build.props 放在 C:\ 根目录下?(以及所有其他驱动器,但对于学生拥有的 USB 驱动器等不起作用) - Gizmo
1个回答

2
创建一个“全局”属性表,其中包含所有必要的更改,并将其添加到任何新项目中。
例如,我创建了一个名为core.props的属性表,并将其保存在解决方案目录中(但您可以将其保存在任何地方)。在此文件中,我添加了包含和库名称/目录(以及其他设置,如指定Visual Studio使用实验性C ++语言功能;指定输出文件的精确目录;更改调试设置等),每当我创建需要使用这些设置的项目时,我只需将该属性表附加到该项目即可。
1. 对于任何项目(或新项目),从“解决方案资源管理器”面板中打开属性管理器。 2. 打开任意随机项目的所需配置文件夹(可能是Debug x64,但由您决定),并为该文件夹添加新的项目属性表。 3. 创建文件后,打开它。 4. 进行您需要的任何修改,以便每个项目都能使用。 5. 保存文件。 6. 对于需要这些属性的每个其他项目,打开相同的文件夹(或任何其他文件夹,如果这些设置不特定于配置),并将现有属性表添加到该文件夹中。 7. 再次操作。
您需要稍微调整确切的设置,以确保它按预期工作(您需要指定库/包含文件的相对路径还是绝对路径等),但是每当您创建新项目时,您只需要设置一个表格,您需要的所有设置都将导入到项目中。如果以后需要进行更改,则只需要修改该文件即可修改所有项目。

8
这绝对不是全球性的问题。我们有一张属性表格,创建它并不是问题所在,问题在于避免需要为每个新项目手动导入它。最好直接使用项目模板,这可以自动完成。 - Antonio Sanchez
@AntonioSanchez 我不知道有什么更简单的方法了。导入属性表对我来说通常只需要10秒钟,所以我没有费心去寻找更快或更简单的方法。 - Xirema
谢谢@Xirema,这对我也有帮助。问题主要是处理如此庞大的班级,其中许多人不精通技术,因此需要为他们完成所有事情。 - Antonio Sanchez
我们有一个类似的问题。我们的解决方案(我仍在调查中)修改注册表键HKCU/Environment/[LIB|INCLUDE|PATH|LIBPATH],并更新目录。这解决了BATCH(VCVARS),但我们似乎还自动嵌入了一个属性文件。我正在深入研究以了解所做的工作。我不确定是否喜欢这个解决方案,这就是为什么我在这里寻找最佳实践的原因。在我的特定情况下,需要一种方法来插入一个全局的“每台机器”属性文件,指向为所有用户创建的*.h/*.dll文件的存储库。 - Ross Youngblood

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接