在使用VS Code之前,在运行CMake之前,请先设置源环境变量。

4

我正在尝试使用CMake Tools和Visual Studio Code中的C/C++扩展来在VS Code中构建一个大型的C++框架。我正在浏览stackoverflow/github issues/任何谷歌建议,看起来我不是第一个遇到这个问题的人,但我无法弄清楚我做错了什么。

以下是问题所在。我希望以一种方式设置VS Code,可以使用内置的工具/扩展直接从VS Code中构建该框架(它是C++)。直到现在,我一直使用以下过程(在Linux的标准终端中),并且在VS Code中运行的终端中也可以工作:

cd /path-to-project-main-folder
source scripts/env.sh
cmake .
make -j 10

现在的问题是,当我设置VS Code并打开包含框架的文件夹时,VS Code会识别它为cmake项目,并给我构建它的机会。问题在于,当我尝试构建时,它不会首先设置环境,因此使用错误的cmake(不是源代码中的那个,而是服务器中内置的默认cmake),还使用了错误的库,其中一些甚至无法识别。 问题出在第一行上:
source scripts/env.sh

在哪里设置环境变量以及一些库和程序的PATH。这行代码在VS Code运行cmake和构建之前不会执行。 有人知道如何配置CMake Tools扩展来运行吗?

source scripts/env.sh

在运行cmake和make之前需要哪些指令?
我正在研究使用tasks.json、settings.json文件或创建自己的工具包来解决问题。但是没有一个解决方案对我有效,或者我没有完全理解这个解决方案。

如果你需要使用shell脚本来设置环境,那就是一个很大的警示信号。通常这种情况发生是因为一些黑客行为或者快速修复,而在大公司中,这种情况会一直持续下去,因为没有人敢于正确地解决问题。话虽如此,你尝试过只是简单地source && run代码吗?比如source scripts/env.sh && code或者source scripts/env.sh; code。我认为,如果VSCode打开了另一个shell,它应该会使用相同的环境变量。 - Milan Š.
Shell脚本主要用于将库的二进制文件编译在一个地方,并通过网络进行分发。我无法自己编译这些二进制文件,或者对于不同的项目,需要不同版本的这些库(向后兼容性问题之类的)。我尝试过在vscode中使用source命令打开终端,但是这两个选项都不起作用,因为CMakeTools会打开新的默认shell。但是我打算尝试在~/.bashrc中使用source命令来运行script/env.sh,这可能会起作用。 - Arual
这是一个可能性。另一种可能性是尝试使用 execute_process()add_custom_command() 进行构建前的处理步骤。 - Milan Š.
看起来将源脚本/env.sh添加到~/.bashrc确实有效,但它还有其他多个问题(例如,对于每个项目,我都需要单独更改那一行)...谢谢你的建议,我会去看看的。 - Arual
每次打开一个shell时,都会执行~/.bashrc。这就是为什么它起作用的原因。add_custom_command()很可能是你想要的prebuild步骤。 - Milan Š.
1个回答

0
这有点取决于你的环境设置脚本的逻辑有多复杂。如果没有控制流,只是设置一些环境变量,那就很容易以惯用方式处理:
在这种简单的情况下,我建议尝试使用CMake Presets。configure presets可以有一个environment属性,您可以在其中定义环境变量。对于库路径,取决于您如何使用这些库路径。如果是用于find_package调用,我认为您可以使用cacheVariables配置预设属性,并设置CMAKE_PREFIX_PATH。或者您可以直接使用CMAKE_CXX_FLAGS设置链接标志。
您还可以查看另一种机制,即CMake Tools' settings- 其中cmake.environmentcmake.configureEnvironmentcmake.buildEnvironmentcmake.testEnvironment可能会引起您的兴趣。
如果这些方法对你不起作用,或者不适合你的使用情况,那么我认为你只能尝试从一个已经加载了环境设置脚本的环境中启动VS Code,这样它就可以继承那些环境变量。

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