You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VS Code更新后CMake构建GLM遇路径变更与编译警告问题

问题分析与解决方案

一、警告含义解析

  • 警告#20012-D:当函数在首次声明时被显式默认(如= default),同时标记__host__和__device__注解,编译器会忽略其中一个注解。这是CUDA编译器的规则,默认函数不支持同时指定主机端和设备端属性。
  • 警告#20013-D:在__host__ __device__函数中调用仅标记__host__的constexpr函数,CUDA默认不允许这种跨端调用,需要启用实验性选项--expt-relaxed-constexpr才能放宽限制。

二、为何之前未出现警告

你之前的配置依赖GLM的安装版头文件,但原CMake脚本中ExternalProject_Add的BUILD_COMMAND和INSTALL_COMMAND为空,意味着从未真正执行GLM的构建与安装流程——之前能正常工作是因为构建目录残留了旧的安装文件。清理构建目录后,你被迫直接引用GLM的源码目录,而GLM源码默认会启用CUDA相关的编译宏(如GLM_FORCE_CUDA),同时你的项目可能因其他库或工具链配置,意外触发了CUDA编译器的语法检查,导致这些原本隐藏的警告暴露出来。

VS Code版本变更只是巧合,真正的诱因是构建目录清理后GLM引用路径的变化,以及源码版GLM的默认编译配置。

三、安全的解决方法

1. 修复GLM的CMake配置(推荐)

恢复到使用GLM安装版的方式,确保ExternalProject_Add正确执行构建和安装:

set(DEP_DIR ${CMAKE_CURRENT_BINARY_DIR}/dep)
set(GLM_INSTALL_DIR ${DEP_DIR}/glm/install)

set(libGLM glm)
ExternalProject_Add(${libGLM}
    PREFIX ${DEP_DIR}/${libGLM}
    GIT_REPOSITORY https://github.com/g-truc/glm.git
    LOG_DOWNLOAD ON
    # 移除空的BUILD/INSTALL命令,让CMake自动执行构建安装流程
    UPDATE_DISCONNECTED 1
    CMAKE_ARGS  -DCMAKE_INSTALL_PREFIX:PATH=${GLM_INSTALL_DIR}
                -DGLM_INSTALL:BOOL=ON
                -DUSE_MSVC_RUNTIME_LIBRARY_DLL:BOOL=OFF
)

target_include_directories(${EXECUTABLE_NAME}
    PUBLIC ${GLM_INSTALL_DIR}/include
)

注意:原脚本中添加的GLAD_INSTALL等参数属于GLAD库的配置,并非GLM的选项,会被GLM的CMakeLists忽略,建议删除。

2. 禁用GLM的CUDA宏(临时方案)

如果暂时需要直接引用GLM源码目录,在项目中强制禁用CUDA相关定义:

  • 方法1:在包含GLM头文件前添加宏定义
#define GLM_FORCE_CUDA OFF
#include <glm/glm.hpp>
  • 方法2:通过CMake全局添加定义
add_definitions(-DGLM_FORCE_CUDA=OFF)

3. 针对性抑制警告(不推荐,仅作应急)

如果必须保留CUDA相关配置,可针对NVCC编译器添加警告抑制:

target_compile_options(${EXECUTABLE_NAME} PRIVATE
    $<$<COMPILE_LANGUAGE:CUDA>:
        -Wno-20012
        -Wno-20013
    >
)

如果是MSVC编译器触发的警告,可使用/wd20012、/wd20013选项,但需注意这些警告码属于NVCC,仅在CUDA编译路径下生效。

4. 检查项目CUDA配置

确认你的项目没有意外启用CUDA编译:检查是否有其他依赖库引入了CUDA,或CMake工具链是否自动检测到CUDA并启用了相关编译规则,导致你的相机类代码被NVCC处理。

内容的提问来源于stack exchange,提问作者b.m.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 10:05:55