Visual Studio添加真正"global"默认包含路径
Visual Studio adding truly "global" default include path
有没有一种简单的方法可以将路径全局(即计算机上的所有用户)添加到Visual Studio中的包含/库目录集?
我正在寻找的是为所有项目(过去和将来)安全地向Visual Studio添加包含/库路径的能力。 这相当于 INCLUDE、LIB 和 LIBPATH 环境变量,这些变量似乎适用于命令行构建,但由于某种原因,在通过 Visual Studio 构建时被完全忽略。 它必须应用于计算机上的所有用户。
我不是在Microsoft.Cpp.Win32.user.props
更改特定于用户的MSBuild属性表,因为这只会添加特定计算机上特定用户的路径。 虽然这似乎是完成"全局"设置的推荐方法,但它不能应用于我的用例:
我参与教授工程师课程的编程入门课程,每年大约有 1000 名学生。 我们有一个计算机实验室供他们进行每周的实验室测验,但是每次学生注销时,都会故意清除任何每用户的设置/文档(因此我们不能依赖用户道具)。 作为课程的一部分,他们需要使用自定义课程库与硬件单元进行交互(因此需要添加包含/库路径)。 为每个项目手动添加路径超出了我们教给学生的范围,并且考虑到他们将在整个学期内每周创建多个项目,因此会变得乏味。
我们尝试过什么:
- 将所需的标头/库安装到 Windows SDK 路径。
这绝对不理想,并且每当Windows SDK更新到较新版本时都会中断 - 将所需的标头/库安装到 Visual Studio 的
Auxiliary
路径。
通过检查默认的VC ++包含目录,VS2017似乎在其标题和库的搜索中包含路径C:Program Files (x86)Microsoft Visual Studio2017CommunityVCAuxiliaryVS
。 根据文档,该文件夹应该用于不是真正参与编译过程的工具。 这就是我们目前所做的,但感觉不对,并且文件夹位置已随着过去的Visual Studio版本而更改,因此将来可能会更改(因此,我们在过去5年中一直使用VS2012)。 每当我们在实验室中更新Visual Studio时,我们还必须重新安装库。
我们可以尝试什么:
- 将路径添加到工具集默认属性表。
同样,建议在各种论坛中不要这样做,而赞成使用用户道具(例如这里)。 工作表本身警告不要修改它们,担心每当工具集更新时都会重置它们,如果在升级 VS 时安装了新工具集,我们将不得不重新修改该工具集的默认工作表。 - 使用所需设置创建项目模板。
我们可以创建一个模板,供学生在通过新建项目向导创建新项目时选择。 令人担忧的是,如果学生使用错误的模板创建一个项目(在如此规模的班级中不可避免地会经常发生这种情况),并在没有设置适当环境的情况下开始他们的测验任务,这将是一场噩梦,处理我们有限的员工提出的问题。 此外,模板是特定于 VS 版本的(并放置在特定于版本的文件夹中),因此每次更改 Visual Studio 版本时,我们都必须重新安装模板。
整个想法是使我们的工作流程面向未来。 我们想要做的非常简单:将单个标头和单个库添加到默认搜索路径中,它应该适用于计算机上安装的任何版本的Visual Studio。 在任何其他系统/IDE 上,这是一项微不足道的任务。 命令行MSBuild甚至通过环境变量支持它。 但是由于某种原因,我们无法找到Visual Studio的简单解决方案。
有人有更好的主意吗?
创建一个包含所需所有必要更改的"全局"属性表,并将其添加到任何和所有新项目中。
对于我的示例,我创建了一个名为core.props
的属性表,并将其保存在解决方案目录中(但您可以将其保存在任何位置),在此文件中,我添加了包含和库名称/目录(以及其他设置,例如指定 Visual Studio 使用实验性C++语言功能;为输出文件指定精确目录;更改调试设置等), 每当我创建需要使用这些设置的项目时,我只需将该属性表附加到项目中即可。
- 对于任何项目(或新项目),请从"解决方案资源管理器"面板中打开属性管理器。
- 为任何随机项目打开所需的配置文件夹(可能
Debug x64
,但这取决于你),并为该文件夹打开"添加新项目属性表"> - 创建文件后,将其打开
- 进行每个项目所需的任何修改
- 保存文件
- 对于需要这些属性的每个其他项目,打开同一文件夹(或任何其他文件夹,如果这些设置不特定于配置)并将"添加现有属性表"到该文件夹
- 冲洗,重复
您需要稍微尝试一下确切的设置,以确保它按预期的方式工作(您是否需要为库/包含/等指定相对路径或绝对路径?),但是每当创建新项目时,您只需要设置一张图纸,您需要的所有设置都将导入到项目中。如果您以后需要进行更改,则只需修改该一个文件即可修改所有文件。
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 如何使用默认参数等选择模板专业化
- 具有默认模板参数的多态类的模板推导失败
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 当函数模板参数是具有默认参数的类模板时,函数模板参数的推导如何执行
- 初始化具有非默认构造函数的std::数组项的更好方法
- 何时提供默认参数作为模板参数
- 是默认情况下分配给char数组常量的值
- 具有默认值的引用获取函数
- 在 .h 文件中的类中声明静态变量和在.cpp文件中声明"global"变量有什么区别
- 具有默认模板类型的默认构造函数的类型推导
- 当给定默认值时,为什么此模板参数推导失败
- 修改 VS Code 中的默认C++代码段
- 声明默认的模板化函数
- 将const引用参数初始化为默认参数会导致悬空引用吗
- 如何使用非默认构造函数实例化模板化类
- 如何修复带有 clang 的参数'args'缺少默认参数的问题?
- 从具有默认值的部分指定模板类继承时发生SWIG错误,具有不带默认值的正向声明
- 为什么大多数 pair 实现默认不使用压缩(空基优化)?
- Visual Studio添加真正"global"默认包含路径