我正在尝试将 Visual Studio Code 与远程 SSH 扩展一起使用(所以我在 Windows 机器上工作,而项目文件在远程 Linux 服务器上)。
为了构建项目(C++ 和 CMake),我需要执行一个设置一些环境变量的脚本。
有没有办法在 vscode 启动服务器时自动执行这样的脚本?
使用 vscode 的终端调用这个脚本对我来说似乎没用,因为这些变量只在这个终端会话中可用,而不是在 vscode 使用的工具和扩展中可用。
我正在努力寻找一种正确的方法来为所有目标传播正确的编译器标志。
假设有一个包含库和单元测试的项目。
ProjectFolder
|-WorkerLibFolder
|-Worker.cpp
|-Worker.hpp
|-CMakeLists.txt (2)
|-main.cpp
|-CMakeLists.txt (1)
|-TestsFolder
|-UnitTests.cpp
|-CMakeLists.txt (3)
Run Code Online (Sandbox Code Playgroud)
在 CMakeLists.txt (1) 中,我想全局设置编译选项,因为我假设项目的所有库的优化级别和其他标志应该相同。
add_compile_options(-Wall -Werror -Wno-error=maybe-uninitialized)用来实现它。
我还使用CMAKE_BUILD_TYPE了在CMAKE_CXX_FLAGS_RELEASE或CMAKE_CXX_FLAGS_DEBUG标志的帮助下自动设置所需优化级别的功能。
此外,这些变量之一被隐式传递给编译器的事实似乎很烦人,因为无论如何我必须提前为所需的优化标志设置这些变量,set(CMAKE_CXX_FLAGS_RELEASE "-Ofast -DNDEBUG -DBOOST_DISABLE_ASSERTS")因为这-O3是默认设置的发布配置。
无论如何,直到我想-O0在编译测试环境 (UniTests.cpp) 时总是设置的那一刻,一切都很好。CMakeLists.txt (3) 生成 project_ut 可执行文件。我希望 WorkerLib 使用配置的优化级别(取自CMAKE_BUILD_TYPE)进行编译,但它自动意味着CMAKE_CXX_FLAGS_RELEASEwith-Ofast被传播到 UnitTest.cpp
我想我可能在这里做了一些奇怪的事情,并且有更好的方法来处理问题。这里的一个选择是在没有CMAKE_BUILD_TYPE功能帮助的情况下传递优化标志,但这似乎是错误的(因为我不想为每个目标维护标志列表)。
编辑:
#CMakeLists.txt(1):
cmake_minimum_required(VERSION 3.14.1)
project(TestProject LANGUAGES CXX C)
##### common comp flags #####
add_compile_options(-Wall -Werror -Wno-error=maybe-uninitialized)
##############################
set(RELEASE_FLAGS "-Ofast -DNDEBUG -DBOOST_DISABLE_ASSERTS") …Run Code Online (Sandbox Code Playgroud)