generated from Sithas/conan_template
Успешный запуск C++ 23!!!
This commit is contained in:
+18
-9
@@ -1,18 +1,27 @@
|
|||||||
cmake_minimum_required(VERSION 3.30.5)
|
cmake_minimum_required(VERSION 3.29.8)
|
||||||
project(UpAndDown)
|
project(UpAndDown)
|
||||||
|
|
||||||
set(CMAKE_CXX_STANDARD 23)
|
set(CMAKE_CXX_STANDARD 23)
|
||||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||||
|
|
||||||
if ("${CMAKE_BUILD_TYPE}" STREQUAL "Debug")
|
if(POLICY CMP0167)
|
||||||
include(${CMAKE_CURRENT_SOURCE_DIR}/cmake-build-debug/conan_toolchain.cmake)
|
cmake_policy(SET CMP0167 OLD)
|
||||||
elseif ("${CMAKE_BUILD_TYPE}" STREQUAL "Release")
|
endif()
|
||||||
include(${CMAKE_CURRENT_SOURCE_DIR}/cmake-build-release/conan_toolchain.cmake)
|
|
||||||
elseif ()
|
set(BOOST_ROOT "C:/Libs/boost_1_88_0")
|
||||||
message(ERROR!!!)
|
|
||||||
|
set(Boost_USE_STATIC_LIBS ON)
|
||||||
|
set(Boost_USE_MULTITHREADED ON)
|
||||||
|
set(Boost_INCLUDE_DIR ${CMAKE_INCLUDE_PATH} ${BOOST_ROOT})
|
||||||
|
set(Boost_LIBRARY_DIR ${CMAKE_LIBRARY_PATH} "${BOOST_ROOT}/stage/lib")
|
||||||
|
|
||||||
|
find_package(Boost 1.84.0 REQUIRED COMPONENTS filesystem json log)
|
||||||
|
if (Boost_FOUND)
|
||||||
|
include_directories(${Boost_INCLUDE_DIR})
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
find_package(Boost REQUIRED)
|
set(THREADS_PREFER_PTHREAD_FLAG ON)
|
||||||
|
find_package(Threads REQUIRED)
|
||||||
|
|
||||||
add_executable(App ./src/main.cpp
|
add_executable(App ./src/main.cpp
|
||||||
./src/helpers/helpers.h
|
./src/helpers/helpers.h
|
||||||
@@ -26,7 +35,7 @@ add_executable(App ./src/main.cpp
|
|||||||
./src/listener/Listener.cpp
|
./src/listener/Listener.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
target_link_libraries(App PRIVATE Boost::boost)
|
target_link_libraries(App PRIVATE Boost::boost Threads::Threads)
|
||||||
|
|
||||||
if (MSVC)
|
if (MSVC)
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /bigobj")
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /bigobj")
|
||||||
|
|||||||
@@ -1,23 +0,0 @@
|
|||||||
from conan import ConanFile
|
|
||||||
from conan.tools.cmake import CMakeToolchain, CMake
|
|
||||||
|
|
||||||
class UpAndDown(ConanFile):
|
|
||||||
name = "up_and_down"
|
|
||||||
version = "1.0.0"
|
|
||||||
settings = "os", "compiler", "build_type", "arch"
|
|
||||||
generators = "CMakeToolchain", "CMakeDeps"
|
|
||||||
|
|
||||||
def requirements(self):
|
|
||||||
self.requires("boost/1.87.0@up_and_down/stable")
|
|
||||||
self.requires("libmysqlclient/8.1.0@up_and_down/stable", override=True)
|
|
||||||
self.requires("lz4/1.10.0@up_and_down/stable", override=True)
|
|
||||||
self.requires("openssl/3.5.0@up_and_down/stable", force=True)
|
|
||||||
self.requires("zlib/1.3.1@up_and_down/stable", override=True)
|
|
||||||
self.requires("zstd/1.5.7@up_and_down/stable", override=True)
|
|
||||||
|
|
||||||
def configure(self):
|
|
||||||
# Настройки для boost
|
|
||||||
self.options["boost/*"].toolset = "msvc-14.3"
|
|
||||||
self.options["boost/*"].without_stacktrace = True
|
|
||||||
self.options["boost/*"].without_context = True
|
|
||||||
self.options["openssl"].shared = True
|
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
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 = [] # Только заголовочная библиотека
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
sources:
|
|
||||||
"8.1.0":
|
|
||||||
url: "https://dev.mysql.com/get/Downloads/MySQL-8.1/mysql-8.1.0.tar.gz"
|
|
||||||
sha256: "3dd017a940734aa90796a4c65e125e6712f64bbbbe3388d36469deaa87b599eb"
|
|
||||||
@@ -1,96 +0,0 @@
|
|||||||
from conan import ConanFile
|
|
||||||
from conan.tools.cmake import CMake, CMakeToolchain, cmake_layout
|
|
||||||
from conan.tools.files import get, copy, rmdir
|
|
||||||
import os
|
|
||||||
|
|
||||||
class LibmysqlclientConan(ConanFile):
|
|
||||||
name = "libmysqlclient"
|
|
||||||
version = "8.1.0"
|
|
||||||
description = "MySQL client library"
|
|
||||||
license = "GPL-2.0"
|
|
||||||
url = "https://dev.mysql.com/"
|
|
||||||
homepage = "https://www.mysql.com"
|
|
||||||
topics = ("mysql", "database", "sql")
|
|
||||||
settings = "os", "compiler", "build_type", "arch"
|
|
||||||
options = {
|
|
||||||
"shared": [True, False],
|
|
||||||
"fPIC": [True, False],
|
|
||||||
}
|
|
||||||
default_options = {
|
|
||||||
"shared": False,
|
|
||||||
"fPIC": True,
|
|
||||||
}
|
|
||||||
|
|
||||||
def config_options(self):
|
|
||||||
if self.settings.os == "Windows":
|
|
||||||
del self.options.fPIC
|
|
||||||
|
|
||||||
def configure(self):
|
|
||||||
if self.options.shared:
|
|
||||||
self.options.rm_safe("fPIC")
|
|
||||||
|
|
||||||
def layout(self):
|
|
||||||
cmake_layout(self, src_folder="src")
|
|
||||||
|
|
||||||
def source(self):
|
|
||||||
get(self, **self.conan_data["sources"][self.version], strip_root=True)
|
|
||||||
|
|
||||||
def generate(self):
|
|
||||||
tc = CMakeToolchain(self)
|
|
||||||
|
|
||||||
# Критически важные настройки
|
|
||||||
tc.variables["WITHOUT_SERVER"] = "ON"
|
|
||||||
tc.variables["WITH_UNIT_TESTS"] = "OFF"
|
|
||||||
tc.variables["DISABLE_SHARED"] = "OFF" if self.options.shared else "ON"
|
|
||||||
tc.variables["DISABLE_STATIC"] = "ON" if self.options.shared else "OFF"
|
|
||||||
|
|
||||||
# Настройки для Windows
|
|
||||||
if self.settings.os == "Windows":
|
|
||||||
tc.variables["WITH_SSL"] = "schannel"
|
|
||||||
tc.variables["WITH_ZLIB"] = "bundled"
|
|
||||||
if "MD" in str(self.settings.compiler.runtime):
|
|
||||||
tc.variables["WINDOWS_RUNTIME_MD"] = "ON"
|
|
||||||
else:
|
|
||||||
tc.variables["WITH_SSL"] = "system"
|
|
||||||
tc.variables["WITH_ZLIB"] = "system"
|
|
||||||
|
|
||||||
tc.generate()
|
|
||||||
|
|
||||||
def build(self):
|
|
||||||
cmake = CMake(self)
|
|
||||||
self.run("cmake --version")
|
|
||||||
self.run("cmake -E chdir . ls -la", shell=True)
|
|
||||||
cmake.configure()
|
|
||||||
cmake.build()
|
|
||||||
|
|
||||||
def package(self):
|
|
||||||
cmake = CMake(self)
|
|
||||||
cmake.install()
|
|
||||||
|
|
||||||
# Копируем только необходимые файлы
|
|
||||||
copy(self, "*.h",
|
|
||||||
src=os.path.join(self.source_folder, "include"),
|
|
||||||
dst=os.path.join(self.package_folder, "include"))
|
|
||||||
|
|
||||||
copy(self, "*.lib",
|
|
||||||
src=os.path.join(self.build_folder, "library_output_directory"),
|
|
||||||
dst=os.path.join(self.package_folder, "lib"))
|
|
||||||
|
|
||||||
copy(self, "*.dll",
|
|
||||||
src=os.path.join(self.build_folder, "library_output_directory"),
|
|
||||||
dst=os.path.join(self.package_folder, "bin"))
|
|
||||||
|
|
||||||
# Удаляем ненужные файлы
|
|
||||||
rmdir(self, os.path.join(self.package_folder, "docs"))
|
|
||||||
rmdir(self, os.path.join(self.package_folder, "share"))
|
|
||||||
rmdir(self, os.path.join(self.package_folder, "bin", "Debug"))
|
|
||||||
rmdir(self, os.path.join(self.package_folder, "lib", "pkgconfig"))
|
|
||||||
|
|
||||||
def package_info(self):
|
|
||||||
self.cpp_info.libs = ["mysqlclient"]
|
|
||||||
self.cpp_info.includedirs = ["include", "include/mysql"]
|
|
||||||
|
|
||||||
if self.settings.os == "Windows":
|
|
||||||
self.cpp_info.system_libs = ["ws2_32", "crypt32", "secur32", "shlwapi", "advapi32"]
|
|
||||||
if self.options.shared:
|
|
||||||
self.cpp_info.defines = ["LIBMYSQL_DYNAMIC"]
|
|
||||||
@@ -1,65 +0,0 @@
|
|||||||
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"]
|
|
||||||
@@ -1,28 +0,0 @@
|
|||||||
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}")
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
sources:
|
|
||||||
"1.3.1":
|
|
||||||
url: "https://github.com/madler/zlib/archive/refs/tags/v1.3.1.tar.gz"
|
|
||||||
sha256: "17e88863f3600672ab49182f217281b6fc4d3c762bde361935e436a95214d05c"
|
|
||||||
@@ -1,45 +0,0 @@
|
|||||||
from conan import ConanFile
|
|
||||||
from conan.tools.files import get, replace_in_file
|
|
||||||
import os
|
|
||||||
|
|
||||||
class ZlibConan(ConanFile):
|
|
||||||
name = "zlib"
|
|
||||||
version = "1.3.1"
|
|
||||||
user = "up_and_down"
|
|
||||||
channel = "stable"
|
|
||||||
settings = "os", "compiler", "build_type", "arch"
|
|
||||||
description = "zlib compression library"
|
|
||||||
license = "Zlib"
|
|
||||||
url = "https://github.com/madler/zlib"
|
|
||||||
|
|
||||||
# Добавляем экспорт данных
|
|
||||||
exports = "conandata.yml"
|
|
||||||
|
|
||||||
def source(self):
|
|
||||||
# Получаем данные из conandata.yml
|
|
||||||
data = self.conan_data["sources"][self.version]
|
|
||||||
get(self, **data, strip_root=True)
|
|
||||||
|
|
||||||
# Удаляем блок IPO для Release
|
|
||||||
cmake_file = os.path.join(self.source_folder, "CMakeLists.txt")
|
|
||||||
replace_in_file(
|
|
||||||
self,
|
|
||||||
cmake_file,
|
|
||||||
"# interprocedural optimizations\n"
|
|
||||||
"if(CMAKE_INTERPROCEDURAL_OPTIMIZATION)\n"
|
|
||||||
" set_target_properties(zlib PROPERTIES INTERPROCEDURAL_OPTIMIZATION_RELEASE ${CMAKE_INTERPROCEDURAL_OPTIMIZATION})\n"
|
|
||||||
"endif()",
|
|
||||||
"",
|
|
||||||
strict=False
|
|
||||||
)
|
|
||||||
|
|
||||||
def build(self):
|
|
||||||
# Ваша логика сборки
|
|
||||||
pass
|
|
||||||
|
|
||||||
def package(self):
|
|
||||||
# Ваша логика упаковки
|
|
||||||
pass
|
|
||||||
|
|
||||||
def package_info(self):
|
|
||||||
self.cpp_info.libs = ["z"]
|
|
||||||
@@ -1,27 +0,0 @@
|
|||||||
from conan import ConanFile
|
|
||||||
from conan.tools.files import get, copy
|
|
||||||
import os
|
|
||||||
|
|
||||||
class ZstdConan(ConanFile):
|
|
||||||
name = "zstd"
|
|
||||||
version = "1.5.7"
|
|
||||||
settings = "os", "compiler", "build_type", "arch"
|
|
||||||
|
|
||||||
def source(self):
|
|
||||||
get(self,
|
|
||||||
url=f"https://github.com/facebook/zstd/releases/download/v{self.version}/zstd-{self.version}.tar.gz",
|
|
||||||
sha256="eb33e51f49a15e023950cd7825ca74a4a2b43db8354825ac24fc1b7ee09e6fa3",
|
|
||||||
strip_root=True)
|
|
||||||
|
|
||||||
def build(self):
|
|
||||||
pass # Используем предсобранные библиотеки
|
|
||||||
|
|
||||||
def package(self):
|
|
||||||
# Копируем предсобранные библиотеки из архива
|
|
||||||
copy(self, "*.h", src=os.path.join(self.source_folder, "lib"), dst=os.path.join(self.package_folder, "include"))
|
|
||||||
copy(self, "*.lib", src=os.path.join(self.source_folder, "lib"), dst=os.path.join(self.package_folder, "lib"))
|
|
||||||
copy(self, "*.dll", src=os.path.join(self.source_folder, "lib"), dst=os.path.join(self.package_folder, "bin"))
|
|
||||||
copy(self, "*.a", src=os.path.join(self.source_folder, "lib"), dst=os.path.join(self.package_folder, "lib"))
|
|
||||||
|
|
||||||
def package_info(self):
|
|
||||||
self.cpp_info.libs = ["zstd"]
|
|
||||||
@@ -1,15 +0,0 @@
|
|||||||
[settings]
|
|
||||||
arch=x86_64
|
|
||||||
build_type=Debug
|
|
||||||
compiler=msvc
|
|
||||||
compiler.cppstd=23
|
|
||||||
compiler.runtime=dynamic
|
|
||||||
compiler.version=193
|
|
||||||
compiler.toolset=v143:version=14.44.35207
|
|
||||||
os=Windows
|
|
||||||
|
|
||||||
[conf]
|
|
||||||
tools.microsoft:winsdk_version=10.0.20348.0
|
|
||||||
tools.microsoft.msbuild:installation_path="C:\\VS2022"
|
|
||||||
tools.microsoft.msbuild:vs_version=2022
|
|
||||||
tools.cmake.cmaketoolchain:generator="Visual Studio 17 2022"
|
|
||||||
@@ -1,15 +0,0 @@
|
|||||||
[settings]
|
|
||||||
arch=x86_64
|
|
||||||
build_type=Release
|
|
||||||
compiler=msvc
|
|
||||||
compiler.cppstd=23
|
|
||||||
compiler.runtime=dynamic
|
|
||||||
compiler.version=193
|
|
||||||
compiler.toolset=v143:version=14.44.35207
|
|
||||||
os=Windows
|
|
||||||
|
|
||||||
[conf]
|
|
||||||
tools.microsoft:winsdk_version=10.0.20348.0
|
|
||||||
tools.microsoft.msbuild:installation_path="C:\\VS2022"
|
|
||||||
tools.microsoft.msbuild:vs_version=2022
|
|
||||||
tools.cmake.cmaketoolchain:generator="Visual Studio 17 2022"
|
|
||||||
@@ -101,7 +101,7 @@ std::string ToHex(std::byte* src, size_t len)
|
|||||||
|
|
||||||
string ret;
|
string ret;
|
||||||
ret.reserve(len * 2);
|
ret.reserve(len * 2);
|
||||||
format formatter = format("%02X");
|
boost::format formatter = boost::format("%02X");
|
||||||
|
|
||||||
for (size_t i = 0; i < len; ++i)
|
for (size_t i = 0; i < len; ++i)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user