基于可正常运行的Makefile编写的CMakeLists编译时embree头文件找不到
问题产生原因
- 头文件搜索路径配置错误:原Makefile中指定的
-I/usr/local/include/embree3配合代码中的#include <embree3/rtcore.h>会拼接出不存在的路径/usr/local/include/embree3/embree3/rtcore.h,因此无法找到头文件。正确的头文件根搜索路径应为/usr/local/include,拼接后可得到正确的文件路径/usr/local/include/embree3/rtcore.h。 - 链接库名称配置错误:原Makefile使用的链接参数是
-lembree3,对应库名是embree3,你编写的CMakeLists.txt中target_link_libraries指定的库名为embree,名称不匹配,即使修复头文件问题,后续链接阶段也会报错。
修复方案
直接修正CMakeLists.txt的两处配置错误即可,修复后的完整内容如下:
cmake_minimum_required(VERSION 3.1.0) project(some_project) include_directories(/usr/local/include) # 修正头文件搜索路径 link_directories(/usr/local/lib/) add_executable(main main.cpp) target_link_libraries(main embree3) # 修正链接库名称
可选优化写法
如果你的系统中已经正确安装embree3的开发包,更推荐使用find_package自动查找依赖,避免硬编码路径,写法如下:
cmake_minimum_required(VERSION 3.1.0) project(some_project) # 自动查找embree3依赖 find_package(embree 3 REQUIRED) add_executable(main main.cpp) # 直接链接embree官方提供的导入目标即可,无需手动指定头文件和库路径 target_link_libraries(main embree::embree)
内容的提问来源于stack exchange,提问作者WillyWonka
相关产品推荐
相关产品推荐

