如何通过CMake抑制CUDA编译时的编译器警告?
解决CUDA编译时Eigen内部警告的问题
针对你遇到的CPP文件编译无警告但CUDA文件触发Eigen内部警告的情况,可尝试以下几种针对性方案:
1. 为CUDA语言单独标记Eigen为系统包含目录
常规的SYSTEM包含设置可能仅对CXX生效,需明确指定覆盖CUDA编译流程:
# 假设已通过find_package找到Eigen find_package(Eigen3 REQUIRED) # 为目标同时添加CXX和CUDA的系统包含目录 target_include_directories(my_proj SYSTEM PUBLIC $<$<COMPILE_LANGUAGE:CXX>:${EIGEN3_INCLUDE_DIR}> $<$<COMPILE_LANGUAGE:CUDA>:${EIGEN3_INCLUDE_DIR}> )
如果依赖的第三方库也包含Eigen路径,可一并加入:
get_target_property(THIRD_PARTY_INCLUDES third_party_lib INTERFACE_INCLUDE_DIRECTORIES) target_include_directories(my_proj SYSTEM PUBLIC $<$<COMPILE_LANGUAGE:CXX>:${THIRD_PARTY_INCLUDES}> $<$<COMPILE_LANGUAGE:CUDA>:${THIRD_PARTY_INCLUDES}> $<$<COMPILE_LANGUAGE:CXX>:${EIGEN3_INCLUDE_DIR}> $<$<COMPILE_LANGUAGE:CUDA>:${EIGEN3_INCLUDE_DIR}> )
2. 针对CUDA编译器单独抑制特定警告
根据编译时实际触发的警告类型,给CUDA目标添加对应抑制选项:
target_compile_options(my_proj PRIVATE $<$<COMPILE_LANGUAGE:CUDA>: -Wno-unused-function # 示例:抑制Eigen中常见的未使用函数警告 -Wno-missing-braces # 根据实际警告替换对应选项 -Wno-deprecated-declarations # 若触发废弃声明警告则添加 > )
3. 升级CMake版本
CMake 3.18及以下版本对CUDA的SYSTEM包含目录支持不完善,建议升级到3.20+版本,确保CUDA目标能正确识别系统包含属性。
4. 检查第三方库的CMake配置(若可修改)
如果依赖的第三方库是CMake构建的,确保它将Eigen的包含目录标记为系统目录:
# 在第三方库的CMakeLists中修改 target_include_directories(third_party_lib INTERFACE SYSTEM ${EIGEN3_INCLUDE_DIR} )
内容的提问来源于stack exchange,提问作者nikitablack
相关产品推荐
相关产品推荐

