zoukankan      html  css  js  c++  java
  • conan使用(一)--安装和应用

    1. 安装conan

    使用pip命令安装conan,如果没有安装pip的,可以先安装好python后,再安装pip。

    pip install conan
    

    之后就可以使用conan命令。(注意Linux下需要使用sudo提升权限)

    2. 管理远程库

    默认conan会添加一个远程库:conan-center:
    image.png

    我们可以使用search选项,搜索包:

    conan search glog --remote conan-center # 在conan-center远程库中搜索glog库
    

    image.png

    我们也可以添加一个远程库:

    conan remote add conan-transit https://conan-transit.bintray.com
    

    image.png

    3. 使用conan管理依赖包

    这里就以使用glog作为我们的一个例子。
    安装我们需要的包命令是:

    conan install glog/0.4.0@bincrafters/stable -r conan-center
    conan remove glog/0.4.0@bincrafters/stable
    

    glog/0.4.0@bincrafters/stable 就是表示一个包,很明显,它的命名很有规则:包名/版本@用户/渠道 .

    不过这里我们并不需要手动先去安装,可以先写一个conanfile.txt:

    [requires]
    glog/0.4.0@bincrafters/stable
    
    [generators]
    cmake
    

    然后执行:

    conan install .
    

    它就会去安装我们指定的包,如果本地没有这个包,那么它就会去我们之前配置好的远程服务器上去查找。执行完install后,会在当前目录生成以下三个文件:
    image.png
    其中:

    • conaninfo.txt这个文件可以判断包的详细信息,包括编译器信息、系统架构等;
    • conanbuildinfo.cmake这个文件是给cmake引入的,即告诉cmake依赖关系,比如头文件的引用路径,库的引用路径,库的链接等信息;
    • conanbuildinfo.txt这个文件方便我们阅读上面的信息。

    接下来就是先编写我们的源代码,main.cpp:

    
    #include <glog/logging.h>
    
    int main(int argc, char* argv[])
    {
            google::InitGoogleLogging(argv[0]);
    		FLAGS_alsologtostderr = true;
            LOG(INFO) << "------conan test-----------------";
    
            google::ShutdownGoogleLogging();
            return 0;
    }
    

    然后编写CmakeLists.txt文件,将conanbuildinfo.cmake配置进去(注意相对路径):

    project(ConanTest)
    cmake_minimum_required(VERSION 2.8.12)
    
    include(${PROJECT_SOURCE_DIR}/conanbuildinfo.cmake)
    conan_basic_setup()
    
    add_executable(${PROJECT_NAME} main.cpp)
    target_link_libraries(${PROJECT_NAME} ${CONAN_LIBS})
    

    然后执行cmake和make,完成编译后,即可执行:
    image.png

    此外需注意的是,默认conan都是采用静态库版本的包,如果想要采用动态库,只需要在conanfile.txt文件中加上以下内容:

    [options]
    glog:shared=True
    

    image.png

    如果想把dll等动态库拷贝到当前工程下,那么还可以在conanfile.txt文件使用import配置

    [imports]
    bin, *.dll -> ./bin # Copies all dll files from packages bin folder to my local "bin" folder
    lib, *.dylib* -> ./bin # Copies all dylib files from packages lib folder to my local "bin" folder
    

    conanfile.txt的更多使用细节,可以参考:https://docs.conan.io/en/latest/reference/conanfile_txt.html。

    另一个需要注意的点时,选择目标包是x86还是x64,可以通过两种方式(默认是x86_64):

    • conan install . -s arch=x86 -s arch_build=x86
    • conan install . --profile=myproject
      profile文件可以定义[settings]字段:
    [settings]
    #setting=value
    os_build=Linux
    arch_build=x86_64
    os=Macos
    arch=x86_64
    compiler=clang
    compiler.version=3.5
    compiler.libcxx=libstdc++11
    build_type=Release
    [options]
    #MyLib:shared=True
    *:shared=True
    [env]
    #env_var=value
    CC=/usr/bin/clang
    CXX=/usr/bin/clang++
    [build_requires]
    #tool/version@user/channel
    

    那么我们可以自己创建一个profeile文件,定义上述设置,然后在install的时候指定配置文件即可。
    补充:settings里的选项都可以直接使用 -s XX=XX 在命令中直接指定,在options你的选项都可以使用 -o XX=XX来进行指定。

    有了conan管理包,复杂的C/C++工程也能像golang、python那样很方便的迁移编译。相比nuget,它对跨平台的支持更好。

  • 相关阅读:
    JUC-ThreadPool线程池
    JUC-JUC强大的辅助类讲解(Semaphore、CyclicBarrier、CountDownLatch)
    JUC—Callable接口
    集合与数组之间相互转化
    [UnityShader基础]07.MaterialPropertyDrawer
    [UnityShader基础]06.#pragma multi_compile
    [Unity优化]UI优化(三):GraphicRebuild
    [UnityAPI]SerializedObject类 & SerializedProperty类
    [Unity算法]点是否在多边形范围内
    [UGUI]圆形Image
  • 原文地址:https://www.cnblogs.com/xl2432/p/11873394.html
Copyright © 2011-2022 走看看