之前用过 vcpkg,群友提起 conan,就去试了一下。结果用出了 cargo 的感觉,于是写一篇文章记录一下。
安装
安装很简单,conan 是 python 写的,现在大家基本都有 python 环境,直接 pip 安装
pip install conan
项目创建
给出一个 uws 项目
main.cpp
#include "App.h"
int main() {
uWS::App()
.get("/*", [](auto *res, auto *req) {
res->end("Hello world!");
})
.listen(3000, [](auto *listen_socket) {
if (listen_socket) {
std::cout << "Listening on port " << 3000 << std::endl;
}
})
.run();
std::cout << "Failed to listen on port 3000" << std::endl;
}
conanfile.txt
[requires]
uwebsockets/20.9.0
[generators]
cmake
[options]
CMakeLists.txt
cmake_minimum_required(VERSION 3.0.0)
project(ee)
include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake)
conan_basic_setup()
set(CMAKE_CXX_STANDARD 17)
add_executable(${PROJECT_NAME} main.cpp)
target_link_libraries(${PROJECT_NAME} ${CONAN_LIBS})
三个文件创建完成之后,创建一个 build
目录,cd
进去,然后安装依赖
mkdir build
cd build
conan install ..
然后他就自动安装好了,通常情况下他会直接下载预编译的文件(隔壁vcpkg会从源码编译)
然后就可以使用 cmake 编译项目了,我用的是 vscode,直接使用
选择64位VS,编译!
然后就看到一堆错误
因为他默认安装的是 release 模式的库,使用 release 模式重新配置,再次编译(vscode 直接点击左下角 Cmake [Debug] 按钮,然后选择 Release)
编译成功,那么怎么安装 Debug 模式的库呢
conan install .. -s build_type=Debug
更改编译选项
众所周知,从源码编译的优点之一是可以自由选择、配置所需特性,conan 也可以。打开 build/conaninfo.txt
,翻到下面 full_options
,这些就是可以修改的选项了,复制需要修改的内容放到 conanfile.txt
里面即可,然后再次执行前面的安装命令。如果有编译好的他会直接下载,没有就自动从源码编译。
添加依赖
去 conan 官网:https://conan.io/center/
搜索需要的库,点击复制按钮
粘贴到 conanfile.txt
里面(有 cargo 内味了),然后执行安装命令就可以了
编译失败时手动修改
下载的源码在 用户\.conan\data\包名\版本\_\_\source
目录里,修改后重新执行从源码安装命令即可。
注意有 patch 文件的不要影响到 patch 附近的代码。