已开启
支持gcc编译 #14
lilexuan创建于 4月27日
支持gcc编译 #14
已开启
lilexuan创建于 4月27日
共 9 个文件变更+133-20
@@ -13,6 +13,11 @@ if(WIN32)
13 add_definitions(-D_WIN32_WINNT=0x0A00)13 add_definitions(-D_WIN32_WINNT=0x0A00)
14endif()14endif()
15 15 
16+set(LIBIRC_GCC_BUILD OFF)
17+if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
18+ set(LIBIRC_GCC_BUILD ON)
19+endif()
20+ 
16# 设置各类项目路径21# 设置各类项目路径
17set(CMAKE_BINARY_DIR "${CMAKE_CURRENT_SOURCE_DIR}/build")22set(CMAKE_BINARY_DIR "${CMAKE_CURRENT_SOURCE_DIR}/build")
18set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/libs")23set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/libs")
@@ -26,7 +31,7 @@ set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/Re
26# 设置Boost库的根目录(应指向 Boost 的安装根目录)31# 设置Boost库的根目录(应指向 Boost 的安装根目录)
27# 直接调用build.bat是不会出现没有BOOST_ROOT的情况的32# 直接调用build.bat是不会出现没有BOOST_ROOT的情况的
28# 这段处理只是满足正确配置config.ini后,编辑器第一次打开,CMAKE工具自动执行不报错33# 这段处理只是满足正确配置config.ini后,编辑器第一次打开,CMAKE工具自动执行不报错
29-if (NOT DEFINED BOOST_ROOT)34+if (NOT LIBIRC_GCC_BUILD AND NOT DEFINED BOOST_ROOT)
30 set(BOOST_ROOT "${CMAKE_CURRENT_SOURCE_DIR}/boost")35 set(BOOST_ROOT "${CMAKE_CURRENT_SOURCE_DIR}/boost")
31 file(READ "${CMAKE_CURRENT_SOURCE_DIR}/config.ini" INI_CONTENT)36 file(READ "${CMAKE_CURRENT_SOURCE_DIR}/config.ini" INI_CONTENT)
32 string(REPLACE "\n" ";" INI_LINES "${INI_CONTENT}")37 string(REPLACE "\n" ";" INI_LINES "${INI_CONTENT}")
@@ -55,13 +60,34 @@ if (NOT DEFINED BOOST_ROOT)
55 endif()60 endif()
56 endforeach()61 endforeach()
57endif()62endif()
58-set(BOOST_NO_SYSTEM_PATHS ON)63+if (LIBIRC_GCC_BUILD AND DEFINED BOOST_ROOT)
59-set(BOOST_INC_DIR ${BOOST_ROOT})64+ set(Boost_NO_SYSTEM_PATHS ON)
60-set(BOOST_LIB_DIR ${BOOST_ROOT}\\lib)65+ set(BOOST_INC_DIR ${BOOST_ROOT})
66+ set(BOOST_LIB_DIR "${BOOST_ROOT}/lib")
67+elseif(NOT LIBIRC_GCC_BUILD)
68+ set(BOOST_NO_SYSTEM_PATHS ON)
69+ set(BOOST_INC_DIR ${BOOST_ROOT})
70+ set(BOOST_LIB_DIR ${BOOST_ROOT}\\lib)
71+endif()
61 72 
62# 查找Boost库,指定需要的组件73# 查找Boost库,指定需要的组件
63-find_package(Boost REQUIRED)74+if (LIBIRC_GCC_BUILD)
64-find_package(Openssl REQUIRED COMPONENTS crypto ssl)75+ find_package(Boost REQUIRED COMPONENTS filesystem json system)
76+ find_package(OpenSSL REQUIRED COMPONENTS SSL Crypto)
77+ set(LIBIRC_LINK_LIBRARIES
78+ Boost::filesystem
79+ Boost::json
80+ Boost::system
81+ OpenSSL::SSL
82+ OpenSSL::Crypto
83+ )
84+ set(LIBIRC_EXAMPLE_LINK_LIBRARIES)
85+else()
86+ find_package(Boost REQUIRED)
87+ find_package(Openssl REQUIRED COMPONENTS crypto ssl)
88+ set(LIBIRC_LINK_LIBRARIES)
89+ set(LIBIRC_EXAMPLE_LINK_LIBRARIES libssl libcrypto)
90+endif()
65 91 
66# 输出 Boost 的相关信息92# 输出 Boost 的相关信息
67message("Boost version: ${Boost_VERSION}")93message("Boost version: ${Boost_VERSION}")
@@ -71,7 +97,11 @@ message("BOOST_LIB_DIR: ${BOOST_LIB_DIR}")
71message("OPENSSL_INC_DIR: ${OPENSSL_INC_DIR}")97message("OPENSSL_INC_DIR: ${OPENSSL_INC_DIR}")
72message("OPENSSL_LIB_DIR: ${OPENSSL_LIB_DIR}") 98message("OPENSSL_LIB_DIR: ${OPENSSL_LIB_DIR}")
73# 包含头文件目录99# 包含头文件目录
74-include_directories(${BOOST_INC_DIR} ${OPENSSL_INC_DIR})100+if (LIBIRC_GCC_BUILD)
101+ include_directories(${BOOST_INC_DIR} ${Boost_INCLUDE_DIRS} ${OPENSSL_INC_DIR} ${OPENSSL_INCLUDE_DIR})
102+else()
103+ include_directories(${BOOST_INC_DIR} ${OPENSSL_INC_DIR})
104+endif()
75include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src)105include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src)
76include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src/AuthClient)106include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src/AuthClient)
77include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src/Image)107include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src/Image)
@@ -88,4 +118,4 @@ link_directories(${BOOST_LIB_DIR} ${OPENSSL_LIB_DIR})
88add_subdirectory(src)118add_subdirectory(src)
89 119 
90# 添加测试代码路径120# 添加测试代码路径
91-add_subdirectory(example)121+add_subdirectory(example)
MREADME.md+72-1
@@ -15,6 +15,77 @@ Integrated-remote-console client libraries
15 我们提供的API会以静态库形式,在libs目录下生成。15 我们提供的API会以静态库形式,在libs目录下生成。
16``16``
17 17 
18+# Linux gcc编译环境
19+## 1、编译需要gcc/g++ + cmake + openssl + boost
20+ 
21+### 1.1 例子使用的环境gcc 14.3.0 + cmake 3.28.3 + boost 1.83.0 + openssl 3.0.13
22+ 
23+```
24+ 当前工程使用C++14标准,Linux环境下指定使用gcc/g++ 14.3编译;
25+ cmake需要最低3.15版本;
26+ boost建议最低使用1.82.0版本,需要filesystem、json、system组件;
27+ openssl建议使用3.0或更高版本,并确保已安装开发头文件和库。
28+ 不需要修改系统默认gcc,不需要执行update-alternatives切换默认编译器。
29+```
30+ 
31+### 1.2 Ubuntu依赖安装
32+ 
33+```
34+ apt-get install -y gcc g++ cmake libssl-dev libboost-dev libboost-filesystem-dev libboost-json-dev
35+```
36+ 
37+### 1.3 确认gcc 14.3路径
38+ 
39+```
40+ 如果gcc 14.3安装在独立目录,例如/opt/gcc-14.3,可以先确认版本:
41+ 
42+ /opt/gcc-14.3/bin/gcc --version
43+ /opt/gcc-14.3/bin/g++ --version
44+```
45+ 
46+```
47+ 如果系统提供的命令名是gcc-14/g++-14,也可以确认实际版本是否为14.3:
48+ 
49+ gcc-14 --version
50+ g++-14 --version
51+```
52+ 
53+### 1.4 使用gcc 14.3配置并编译
54+ 
55+```
56+ 使用独立安装路径时:
57+ 
58+ cmake -S . -B build-gcc-14.3 \
59+ -DCMAKE_C_COMPILER=/opt/gcc-14.3/bin/gcc \
60+ -DCMAKE_CXX_COMPILER=/opt/gcc-14.3/bin/g++
61+ cmake --build build-gcc-14.3 --config Release
62+```
63+ 
64+```
65+ 使用gcc-14/g++-14命令名时:
66+ 
67+ cmake -S . -B build-gcc-14.3 \
68+ -DCMAKE_C_COMPILER=gcc-14 \
69+ -DCMAKE_CXX_COMPILER=g++-14
70+ cmake --build build-gcc-14.3 --config Release
71+```
72+ 
73+### 1.5 清理后重新编译
74+ 
75+```
76+ cmake --build build-gcc-14.3 --clean-first --config Release
77+```
78+ 
79+### 1.6 gcc编译产物
80+ 
81+```
82+ 编译完成后,静态库和测试工具会生成在以下位置:
83+ 
84+ libs/libirc.a # irc静态库,开发者可依赖该库做二次开发
85+ bin/authentication_test # 认证模块测试工具
86+ bin/websocket_test # websocket/KVM客户端测试工具
87+```
88+ 
18## 2、本API开发说明89## 2、本API开发说明
19 90 
20```91```
@@ -103,4 +174,4 @@ Integrated-remote-console client libraries
103### 3.2 部署详细过程:174### 3.2 部署详细过程:
104```175```
105 部署详情可以clone项目到本地查看《部署指引.docx》176 部署详情可以clone项目到本地查看《部署指引.docx》
106-```177+```
@@ -4,5 +4,9 @@ project(authentication_test)
4set(CPP_FILES "demo.cpp")4set(CPP_FILES "demo.cpp")
5 5 
6add_executable(${PROJECT_NAME} ${CPP_FILES})6add_executable(${PROJECT_NAME} ${CPP_FILES})
7-target_include_directories(${PROJECT_NAME} PRIVATE "${CMAKE_SOURCE_DIR}\\src\\")7+if(LIBIRC_GCC_BUILD)
8-target_link_libraries(${PROJECT_NAME} libssl libcrypto irc)8+ target_include_directories(${PROJECT_NAME} PRIVATE "${CMAKE_SOURCE_DIR}/src")
9+else()
10+ target_include_directories(${PROJECT_NAME} PRIVATE "${CMAKE_SOURCE_DIR}\\src\\")
11+endif()
12+target_link_libraries(${PROJECT_NAME} ${LIBIRC_EXAMPLE_LINK_LIBRARIES} irc)
Mexample/authentication/demo.cpp+3-2文件内容审核中,请稍后刷新重试
@@ -4,5 +4,9 @@ project(websocket_test)
4set(CPP_FILES "demo.cpp")4set(CPP_FILES "demo.cpp")
5 5 
6add_executable(${PROJECT_NAME} ${CPP_FILES})6add_executable(${PROJECT_NAME} ${CPP_FILES})
7-target_include_directories(${PROJECT_NAME} PRIVATE "${CMAKE_SOURCE_DIR}\\src\\")7+if(LIBIRC_GCC_BUILD)
8-target_link_libraries(${PROJECT_NAME} libssl libcrypto irc)8+ target_include_directories(${PROJECT_NAME} PRIVATE "${CMAKE_SOURCE_DIR}/src")
9+else()
10+ target_include_directories(${PROJECT_NAME} PRIVATE "${CMAKE_SOURCE_DIR}\\src\\")
11+endif()
12+target_link_libraries(${PROJECT_NAME} ${LIBIRC_EXAMPLE_LINK_LIBRARIES} irc)
Msrc/AuthClient/ClientAuthentication.hpp+1-1文件内容审核中,请稍后刷新重试
Msrc/AuthClient/ClientBaseHttp.hpp+1-1文件内容审核中,请稍后刷新重试
@@ -2,4 +2,7 @@ cmake_minimum_required(VERSION 3.15)
2# libirc API库2# libirc API库
3project(irc)3project(irc)
4file(GLOB_RECURSE CPP_FILES "*.cpp") 4file(GLOB_RECURSE CPP_FILES "*.cpp")
5-add_library(${PROJECT_NAME} STATIC ${CPP_FILES})5+add_library(${PROJECT_NAME} STATIC ${CPP_FILES})
6+if(LIBIRC_LINK_LIBRARIES)
7+ target_link_libraries(${PROJECT_NAME} PUBLIC ${LIBIRC_LINK_LIBRARIES})
8+endif()
Msrc/KvmClient.hpp+2-2文件内容审核中,请稍后刷新重试