conan2 基础入门(06)-conanfile.py入门

conan2 基础入门(06)-conanfile.py入门

⭐准备

注意,如果想跟好的学习conanfile.py建议使用python来安装conan。

当然使用其他方式安装也是有效果的。

安装教程:conan2 基础入门(02)-安装-CSDN博客

预备文件和Code

文件名预览

:.
│  CMakeLists.txt
│  conanfile.py
└─ main.cpp

main.cpp

#include <json/json.h>

#include <iostream>

void test_env() {
    std::cout << ">>>" << __func__ << std::endl;
    std::cout << "sizeof(void*) = " << sizeof(void *) << std::endl;
#if defined(_MSC_VER)
    // msvc的判断方式
#ifdef _DEBUG
    std::cout << "Debug version" << std::endl;
#else
    std::cout << "Release version" << std::endl;
#endif
    std::cout << "_MSC_VER = " << _MSC_VER << std::endl;
#endif
}

void test_jsoncpp(void) {
    std::cout << ">>>" << __func__ << std::endl;

    Json::Value up;
    up["name"]     = "cuber-lotus";
    up["bilibili"] = "https://space.bilibili.com/8172252";
    std::cout << "up: " << up << std::endl;
}

int main(void) {
    test_env();
    test_jsoncpp();
}

CMakeLists.txt

cmake_minimum_required(VERSION 3.15)
project(mydemo CXX)

set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/bin)

find_package(jsoncpp REQUIRED)

add_executable(${PROJECT_NAME} main.cpp)

target_link_libraries(${PROJECT_NAME} JsonCpp::JsonCpp)

conanfile.py

import os

from conan import ConanFile
from conan.tools.files import copy


class MyConanFile(ConanFile):
    '''
    继承 class ConanFile
    '''
    settings = "os", "compiler", "build_type", "arch"
    generators = "CMakeToolchain", "CMakeDeps"

    # 设置`shared`属性可以为[True, False]
    options = {"shared": [True, False]}
    # 为options中的属性设置默认值
    default_options = {"shared": True}

    def requirements(self):
        self.requires("jsoncpp/1.9.5")

    def generate(self):
        # 如果采用动态库的方式
        # 将动态库复制到可执行文件目录下
        if not self.options.shared:
            return
        for dep in self.dependencies.values():
            for depDll in dep.cpp_info.bindirs:
                print(">>>")
                print(">>>", depDll)
                print(">>>")
                copy(self, "*.dll", depDll,
                     os.path.join(self.source_folder, "bin/Release"))

⭐使用

流程指令

@REM -o jsoncpp*:shared=True 在conan install 命令行显示的指定动态库
conan install . --output-folder=build --build=missing -o jsoncpp*:shared=True

cd build

cmake .. -G "Visual Studio 16 2019" -DCMAKE_TOOLCHAIN_FILE="conan_toolchain.cmake"

cmake --build . --config Release

cd ../bin/Release

mydemo.exe

⭐具体讲解

conanfile.py

首先这是一个脚本性质的文件,不是一个完整运行的程序。

重点在于from conan import ConanFile

class 继承(ConanFile)

我们只需要继承class ConanFile进行特化即可。

settings

这里对应好使用的profile文件的内容

settings = "os", "compiler", "build_type", "arch"

generators

这里是为了使用cmake。于conanfile.txt中的generators一致。

generators = "CMakeToolchain", "CMakeDeps"

options

选项设置,属于辅助变量。规定当前的脚本需要的选项。

# 设置`shared`属性可以为[True, False]
options = {"shared": [True, False]}

default_options

默认的属性,与options对应。

# 为options中的属性设置默认值
default_options = {"shared": True}

requirements()

The requirements() method is used to specify the dependencies of a package.

requirements() 方法用于指定包的依赖项。

    def requirements(self):
        self.requires("jsoncpp/1.9.5")

generate()

This method will run after the computation and installation of the dependency graph.

This means that it will run after a conan install command, or when a package is being built in the cache, it will be run before calling the build() method.

该函数会在计算和安装依赖图后运行。

这就意味着这会在conan install执行之后运行,或者当一个包在缓存中构建之后,generate()会在build()前运行。

    # 注:此处是与本文最上面的精简版。
    def generate(self):
        # 将动态库复制到可执行文件目录下
        for dep in self.dependencies.values():
            for depDll in dep.cpp_info.bindirs:
                copy(self, "*.dll", depDll,
                     os.path.join(self.source_folder, "bin/Release"))

conan install

指定生成动态库

在python脚本中的选项仅是做脚本编码时的辅助。

真正需要指定生成动态库需要在conan install执行中指定。

conanfile.txt也可以这么操作,但其本身支持在配置中指定动态库。

conan install . 			\
	--output-folder=build 	\
	--build=missing 		\
	-o jsoncpp*:shared=True



END

视频教学

conan2.0 基础入门 (主流的C/C++包管理工具)_哔哩哔哩_bilibili

关注我,学习更多C/C++,算法,计算机知识

B站:

👨‍💻主页:天赐细莲 bilibili

  • 27
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值