conan2 基础入门(06)-conanfile.py入门
文章目录
- conan2 基础入门(06)-conanfile.py入门
- ⭐准备
- 预备文件和Code
- ⭐使用
- 流程指令
- ⭐具体讲解
- conanfile.py
- conan install
- END
- 视频教学
⭐准备
注意,如果想跟好的学习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 _DEBUGstd::cout << "Debug version" << std::endl;
#elsestd::cout << "Release version" << std::endl;
#endifstd::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 osfrom conan import ConanFile
from conan.tools.files import copyclass 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:returnfor 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=Truecd buildcmake .. -G "Visual Studio 16 2019" -DCMAKE_TOOLCHAIN_FILE="conan_toolchain.cmake"cmake --build . --config Releasecd ../bin/Releasemydemo.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