Кое-какая настройка Conan'a

This commit is contained in:
Антон
2025-07-01 09:23:35 +03:00
parent 4018d48f35
commit f388a207c2
9 changed files with 180 additions and 9 deletions
+26
View File
@@ -0,0 +1,26 @@
from conan import ConanFile
from conan.tools.files import get, copy
import os
class CustomBoostConan(ConanFile):
name = "boost"
version = "1.87.0"
settings = "os", "compiler", "arch", "build_type"
def source(self):
# Используем прямой URL с GitHub
get(self, "https://github.com/boostorg/boost/archive/refs/tags/boost-1.87.0.zip",
destination=self.source_folder, strip_root=True)
def build(self):
pass # Пропускаем сборку
def package(self):
# Копируем заголовочные файлы
copy(self, "*",
os.path.join(self.source_folder, "boost"),
os.path.join(self.package_folder, "include", "boost"))
def package_info(self):
self.cpp_info.includedirs = ["include"]
self.cpp_info.libdirs = [] # Только заголовочная библиотека
+65
View File
@@ -0,0 +1,65 @@
from conan import ConanFile
from conan.tools.cmake import CMake, CMakeToolchain
from conan.tools.files import get, replace_in_file, load
import os
import re
class Lz4Conan(ConanFile):
name = "lz4"
version = "1.10.0"
settings = "os", "compiler", "arch", "build_type"
def source(self):
# Скачиваем исходники
url = f"https://github.com/lz4/lz4/archive/refs/tags/v{self.version}.tar.gz"
get(self, url, strip_root=True)
# Находим CMakeLists.txt в правильном месте
cmakelists_path = os.path.join(self.source_folder, "build", "cmake", "CMakeLists.txt")
if not os.path.exists(cmakelists_path):
# Для более новых версий lz4 путь может быть другим
cmakelists_path = os.path.join(self.source_folder, "CMakeLists.txt")
# Применяем исправление для VS2022
if os.path.exists(cmakelists_path):
content = load(self, cmakelists_path)
# Добавляем исправление, если его еще нет
if "CMP0091" not in content:
# Ищем место для вставки после cmake_minimum_required
new_content = re.sub(
r'(cmake_minimum_required\(VERSION [\d.]+\))',
r'\1\n\n# Fix for VS2022\ncmake_policy(SET CMP0091 NEW)',
content
)
with open(cmakelists_path, "w", encoding="utf-8") as f:
f.write(new_content)
self.output.info("Applied VS2022 fix to CMakeLists.txt")
def generate(self):
tc = CMakeToolchain(self)
# Явно указываем генератор для VS2022
if self.settings.compiler == "msvc" and self.settings.compiler.version == "193":
tc.generator = "Visual Studio 17 2022"
# Дополнительные настройки для MSVC
tc.preprocessor_definitions["_CRT_SECURE_NO_WARNINGS"] = "1"
tc.variables["CMAKE_MSVC_RUNTIME_LIBRARY"] = "MultiThreaded$<$<CONFIG:Debug>:Debug>"
tc.generate()
def build(self):
cmake = CMake(self)
# Автоматически определяем папку со скриптами CMake
if os.path.exists(os.path.join(self.source_folder, "build", "cmake")):
cmake.configure(build_script_folder=os.path.join("build", "cmake"))
else:
cmake.configure()
cmake.build()
def package(self):
cmake = CMake(self)
cmake.install()
def package_info(self):
self.cpp_info.libs = ["lz4"]
+28
View File
@@ -0,0 +1,28 @@
from conan import ConanFile
from conan.tools.microsoft import msvs_toolset, is_msvc
from conan.tools.env import VirtualBuildEnv
class OpenSSLConan(ConanFile):
name = "openssl"
version = "3.5.0"
settings = "os", "compiler", "arch", "build_type"
def generate(self):
vs_version = None
if is_msvc(self):
# Получаем версию тулсета (v143 для VS2022)
toolset = msvs_toolset(self)
self.output.info(f"Detected toolset: {toolset}")
# Сопоставляем тулсет с версией VS
if "v143" in toolset:
vs_version = "17" # VS2022
elif "v142" in toolset:
vs_version = "16" # VS2019
if vs_version:
# Правильный способ установки переменных окружения в Conan 2.x
build_env = VirtualBuildEnv(self)
build_env.environment().define("CONAN_VS_VERSION", vs_version)
build_env.generate()
self.output.info(f"Setting VS version to: {vs_version}")