Mac下CMake编译libevhtp无法找到/usr/local/include头文件求助
解决Mac 10.13.3编译libevhtp时找不到event2/dns.h的问题
我之前在Mac上编译依赖libevent的项目时也碰到过类似的CMake路径识别坑,结合你的情况,给你几个可行的解决办法:
方法1:显式指定libevent的头文件和库路径给CMake
有时候CMAKE_INCLUDE_PATH全局变量可能没被libevent的查找模块正确读取,直接显式指定libevent的专属变量会更可靠:
# 先清空build目录避免旧缓存干扰 rm -rf build && mkdir build && cd build # 显式指定libevent的头文件和库路径 cmake -DLIBEVENT_INCLUDE_DIR=/usr/local/include -DLIBEVENT_LIBRARY=/usr/local/lib/libevent.dylib .. make
方法2:通过环境变量强制Clang搜索头文件
Mac的Xcode Clang默认不会自动搜索/usr/local/include,可以在cmake前设置环境变量,让编译器全局感知这个路径:
rm -rf build && mkdir build && cd build # 设置编译和链接的路径变量 export CFLAGS="-I/usr/local/include" export CXXFLAGS="-I/usr/local/include" export LDFLAGS="-L/usr/local/lib" # 再运行cmake和make cmake .. make
方法3:直接修改libevhtp的CMakeLists.txt
如果上面两种方法都没用,可以直接在libevhtp的根目录CMakeLists.txt开头添加路径配置,强制让CMake包含/usr/local/include:
打开libevhtp/CMakeLists.txt,在最顶部(project(evhtp)之前)添加:
include_directories(/usr/local/include) link_directories(/usr/local/lib)
然后重新执行cmake和make流程即可。
问题原因说明
你遇到的核心问题是:CMake虽然探测到了libevent的库文件,但没有正确把/usr/local/include加入到编译的头文件搜索路径里。Mac系统下Xcode的默认编译路径不包含/usr/local,而libevent通常是通过Homebrew或手动编译安装到这个目录的,所以需要手动告诉CMake或编译器这个路径。
内容的提问来源于stack exchange,提问作者user826955
相关产品推荐
相关产品推荐

