如何在CMake中引入libuv?find_package失败后的方案选择咨询
解决CMake找不到libuv-config.cmake的问题
先试试让find_package正常工作的方案
别着急拷贝源码,先试这些方法:
- 指定libuv安装路径:如果你已经装了libuv(不管是包管理器装的还是手动编译的),只是CMake没找到,就在
find_package前加一行设置路径:
路径要换成包含lib、include、share/cmake的那个根目录。set(CMAKE_PREFIX_PATH "/实际的libuv安装根目录" ${CMAKE_PREFIX_PATH}) find_package(libuv REQUIRED) - 直接指定Config文件位置:要是知道
libuv-config.cmake在哪,直接设置libuv_DIR:set(libuv_DIR "/存放libuv-config.cmake的文件夹路径") find_package(libuv REQUIRED) - 用包管理器装带CMake配置的版本:比如Debian/Ubuntu装
libuv1-dev,macOS用brew装libuv,这些包一般会自带CMake需要的配置文件,装完CMake就能自动找到。 - 编译libuv时指定安装路径:自己编译libuv的话,编译命令加
-DCMAKE_INSTALL_PREFIX=/你想装的路径,安装后CMake就能在这个路径下找到配置文件。
什么时候考虑拷贝源码到项目
如果上面的方法都搞不定(比如项目必须离线编译、要固定libuv版本),再考虑把libuv源码拷到项目里,用add_subdirectory引入:
- 把libuv源码放到项目子目录(比如
third_party/libuv),然后在CMakeLists.txt里加:
之后直接链接add_subdirectory(third_party/libuv)uv目标就行,这是libuv编译后生成的目标。 - 这种方式不用依赖系统环境里的libuv版本,但会增加项目体积,更新libuv得手动换源码。
总结
优先搞定find_package的问题,这符合CMake的标准用法,后续更新版本也方便;只有特殊场景下,再考虑把libuv源码嵌入项目。
内容的提问来源于stack exchange,提问作者Qixiny
相关产品推荐
相关产品推荐

