已开启
支持gcc编译 #14
lilexuan创建于 4月27日
支持gcc编译 #14
已开启
共 9 个文件变更+133-20
| @@ -13,6 +13,11 @@ if(WIN32) | |||
| 13 | add_definitions(-D_WIN32_WINNT=0x0A00) | 13 | add_definitions(-D_WIN32_WINNT=0x0A00) |
| 14 | endif() | 14 | endif() |
| 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 | # 设置各类项目路径 |
| 17 | set(CMAKE_BINARY_DIR "${CMAKE_CURRENT_SOURCE_DIR}/build") | 22 | set(CMAKE_BINARY_DIR "${CMAKE_CURRENT_SOURCE_DIR}/build") |
| 18 | set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/libs") | 23 | set(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() |
| 57 | endif() | 62 | endif() |
| 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 的相关信息 |
| 67 | message("Boost version: ${Boost_VERSION}") | 93 | message("Boost version: ${Boost_VERSION}") |
| @@ -71,7 +97,11 @@ message("BOOST_LIB_DIR: ${BOOST_LIB_DIR}") | |||
| 71 | message("OPENSSL_INC_DIR: ${OPENSSL_INC_DIR}") | 97 | message("OPENSSL_INC_DIR: ${OPENSSL_INC_DIR}") |
| 72 | message("OPENSSL_LIB_DIR: ${OPENSSL_LIB_DIR}") | 98 | message("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() | ||
| 75 | include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src) | 105 | include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src) |
| 76 | include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src/AuthClient) | 106 | include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src/AuthClient) |
| 77 | include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src/Image) | 107 | include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src/Image) |
| @@ -88,4 +118,4 @@ link_directories(${BOOST_LIB_DIR} ${OPENSSL_LIB_DIR}) | |||
| 88 | add_subdirectory(src) | 118 | add_subdirectory(src) |
| 89 | 119 | ||
| 90 | # 添加测试代码路径 | 120 | # 添加测试代码路径 |
| 91 | -add_subdirectory(example) | 121 | +add_subdirectory(example) |
| @@ -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) | |||
| 4 | set(CPP_FILES "demo.cpp") | 4 | set(CPP_FILES "demo.cpp") |
| 5 | 5 | ||
| 6 | add_executable(${PROJECT_NAME} ${CPP_FILES}) | 6 | add_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) | ||
| @@ -4,5 +4,9 @@ project(websocket_test) | |||
| 4 | set(CPP_FILES "demo.cpp") | 4 | set(CPP_FILES "demo.cpp") |
| 5 | 5 | ||
| 6 | add_executable(${PROJECT_NAME} ${CPP_FILES}) | 6 | add_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) | ||
| @@ -2,4 +2,7 @@ cmake_minimum_required(VERSION 3.15) | |||
| 2 | # libirc API库 | 2 | # libirc API库 |
| 3 | project(irc) | 3 | project(irc) |
| 4 | file(GLOB_RECURSE CPP_FILES "*.cpp") | 4 | file(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() | ||