Automake搭配CUDA编译时Include Flags被忽略的问题排查
问题原因及解决办法
核心原因
Automake的隐式编译规则按语言独立处理:
.cpp这类C源文件的编译,只会读取CXXFLAGS、AM_CXXFLAGS这类**C专属编译变量**;- 你配置的
CUDA_INCLUDE_FLAGS属于CUDA编译相关变量,默认不会自动注入到C++的编译流程中,所以main.cpp编译时不会带上CUDA头文件路径,导致找不到cuda_runtime.h。
解决办法
1. 将CUDA头路径合并到C++编译标志
直接在src/Makefile.am里把CUDA_INCLUDE_FLAGS加入C++全局编译标志:
AM_CXXFLAGS += $(CUDA_INCLUDE_FLAGS)
这样所有C++文件编译时都会自动带上CUDA的头文件搜索路径。
2. 针对目标程序单独配置
如果仅当前可执行程序的C++代码依赖CUDA头文件,可在src/Makefile.am的目标定义中单独指定:
bin_PROGRAMS = cuda_demo cuda_demo_SOURCES = main.cpp aux.cu # 给C++代码添加CUDA头路径 cuda_demo_CXXFLAGS = $(CUDA_INCLUDE_FLAGS) # 给CUDA代码配置专属编译选项(可选) cuda_demo_NVCCFLAGS = $(CUDA_INCLUDE_FLAGS) -arch=sm_70
3. 确认configure.ac的变量传递正确
确保你在configure.ac中已将CUDA_INCLUDE_FLAGS导出给Makefile使用,添加:
AC_SUBST(CUDA_INCLUDE_FLAGS)
如果是手动检测CUDA路径,要保证CUDA_INCLUDE_FLAGS赋值正确,比如:
CUDA_INCLUDE_FLAGS="-I/usr/local/cuda/include" AC_SUBST(CUDA_INCLUDE_FLAGS)
内容的提问来源于stack exchange,提问作者Cherry Toska
相关产品推荐
相关产品推荐

