楔子
有时候,你可能会想着自定义一些环境变量。目前很多构建系统都使用到了环境变量来定义其行为,另外,在调试目标程序时,也会需要PATH环境变量来确保相关的依赖项被正确地探测到。
在Visual Studio中有一个内建的机制来自定义环境变量,从而更方便的构建和调试CMake工程。
在最新版Visual Studio v16.4中,我们对Visual Studio的JSON配置文件做了一些修改来简化这个过程。
快速总结
这篇文章将主要讲述如何重头开始使用这个特性,因为有些人可能对这个特性并不是十分了解。对于那些之前体验过这个特性的人,我建议你先看看下面有关改动的一个快速总结。
> 现有的JSON配置文件将继续有效,但是IntelliSense将会推荐使用新的语法。
> 调试目标将会根据CMakeSettings.json和CppProperties.json的配置的环境进行自动启动。对于自定义任务,还是和以前一样,没有任何变化。
> 在launch.vs.json和tasks.vs.json添加了一个新的叫做”env”的tag,调试目标和自定义任务可以使用它们各自独立的环境变量。
> 在CppProperties.json中定义的配置相关的变量将在调试目标和自定义任务中自动被系统提取,这样就不需要像以前那样需要设置”inheritEnvironments”了。CMakeSettings.json一直都是这样工作的,没有什么改变。
自定义环境变量
对于CMake和C++的Open Folder来说,有两种方法来为它们指定环境变量。
第一种是为整个构建环境设置环境变量。对于CMake工程,可以通过修改CMakeSettings.json配置文件来设定环境变量,对于C++ Open Folder,则是修改CppProperties.json配置文件。
环境变量可以设定为工程全局型或者针对特定配置型(可以通过下拉列表选择不同的配置)。这些被定义的全局变量,会在所有阶段被提取,包括CMake编译阶段,自定义任务阶段和目标调试阶段。
在Visual Studio中,环境变量可以使用如下的语法来进行引用:
全局或者特定配置相关的环境变量可以在CMakeSettings.json和CppProperties.json中的”environment”块被定义。举个例子,下面的CMakeSettings.json配置文件中,我们分别为Debug和Release配置设定了不同的环境变量:
第二种方法主要用来自定义目标调试和自定义任务,可以通过分别修改launch.vs.json和tasks.vs.json这两个配置文件来实现。具体来说,就是在配置文件中添加一个”env”的tag,如下图所示:
在上面的例子中,我们为调试目标添加了一个环境变量来自定义日志的级别。
另外请注意,如果您想对所有调试目标和任务设定环境变量,推荐在CMakeSettings.json和 CppProperties.json定义全局性变量。
总结
我,是一个不爱使用环境变量的人,因为,我总觉得,从某种(刁钻的)角度来说,环境变量提高了构建的耦合性。构建一个项目,因外部环境导致的构建失败,当然是越少越吼啦。
如果觉得《长标题:为调试 启动和CMake工具设置环境变量》对你有帮助,请点赞、收藏,并留下你的观点哦!