cmake3 编译 quickfast

1.CMakeLists.txt

# project	: quick fast
# author	: gaoli
# date		: 2022-04-30
# remark	: first compile
# 1.link_libraries:
# 	1)库导入顺序原则:使用的库要放在其依赖的库前面!即最基础库放在最后。
# 2.使用方法
# 1)mkdir build
# 2)cd build
# 3)cmake3 ..
# 4)make

# CMake 最低版本号要求
cmake_minimum_required(VERSION 3.17.5 FATAL_ERROR)

# 设置默认编译类型
if((NOT DEFINED CMAKE_BUILD_TYPE) OR (CMAKE_BUILD_TYPE STREQUAL ""))
	set( CMAKE_BUILD_TYPE "release" )
endif()

# 默认名称
set(MY_NAME "QuickFAST")

# 设置编译参数
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC -fpermissive -MMD -MP -Wall -Wno-deprecated -Wl,-rpath=.")
if(${CMAKE_BUILD_TYPE} MATCHES "debug")
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ggdb3 -g")
	set(MY_NAME "QuickFASTd")
else()
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O2")
endif()

# 项目信息
project(${MY_NAME} VERSION 1.1.1 LANGUAGES CXX C)

# 系统设置
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_EXTENSIONS OFF)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# 设置查找 include 路径(该目录文件改动,需要重新执行:"cmake3 ..")
set (CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/")
# 本地变量
include("LocalPaths")

# 加入一个配置头文件,用于处理 CMake 对源码的设置
# configure_file ("${PROJECT_SOURCE_DIR}/inc/config.h.in" "${PROJECT_SOURCE_DIR}/inc/config.h")

# 输出目录
# set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)

# 头文件目录
include_directories(${PROJECT_SOURCE_DIR})

# 主目录
file(GLOB_RECURSE SRC_LIST "Application/*.cpp")

file(GLOB_RECURSE SRC_LIST_Codecs "Codecs/*.cpp")
list(APPEND SRC_LIST ${SRC_LIST_Codecs})

file(GLOB_RECURSE SRC_LIST_Common "Common/*.cpp")
list(APPEND SRC_LIST ${SRC_LIST_Common})

file(GLOB_RECURSE SRC_LIST_Communication "Communication/*.cpp")
list(APPEND SRC_LIST ${SRC_LIST_Communication})

file(GLOB_RECURSE SRC_LIST_Messages "Messages/*.cpp")
list(APPEND SRC_LIST ${SRC_LIST_Messages})

# file(GLOB_RECURSE SRC_LIST_DotNet "DotNet/*.cpp")
# list(APPEND SRC_LIST ${SRC_LIST_DotNet})

### 合并
# set(SRC_LIST main.cpp)
# list(APPEND SRC_LIST test.cpp)
# list(REMOVE_ITEM SRC_LIST main.cpp)
# add_executable(demo ${SRC_LIST})

### 按规则查找源文件
# file(GLOB SRC_LIST "*.cpp" "protocol/*.cpp")
# add_library(demo ${SRC_LIST})

# file(GLOB SRC_LIST "*.cpp")
# file(GLOB SRC_PROTOCOL_LIST "protocol/*.cpp")
# add_library(demo ${SRC_LIST} ${SRC_PROTOCOL_LIST})

### 递归搜索
# file(GLOB_RECURSE SRC_LIST "*.cpp") 
# FILE(GLOB SRC_PROTOCOL RELATIVE "protocol" "*.cpp") # 相对protocol目录下搜索
# add_library(demo ${SRC_LIST} ${SRC_PROTOCOL_LIST})

# 查找src目录下的所有源文件,并将名称保存到 SRC_LIST 变量
# aux_source_directory(src SRC_LIST)
# add_library(demo ${SRC_LIST} ${SRC_PROTOCOL_LIST})

message(${SRC_LIST})
message("CMAKE_CXX_FLAGS = " ${CMAKE_CXX_FLAGS})
# 指定生成目标
# add_executable(${PROJECT_NAME} ${SRC_LIST})
add_library(${PROJECT_NAME} SHARED ${SRC_LIST})

include_directories(${XERCES_C_INCLUDEDIR})
find_library( xerces_c_LIBRARY NAMES libxerces-c-3.2.so HINTS ${XERCES_C_ROOT}/linux )
target_link_libraries(${PROJECT_NAME} ${xerces_c_LIBRARY} )

# 第三方库:查找
include_directories(${BOOST_INCLUDEDIR})
find_library( boost_log_LIBRARY NAMES libboost_log.a HINTS ${BOOST_LIBRARYDIR} )
target_link_libraries(${PROJECT_NAME} ${boost_log_LIBRARY})
find_library( boost_system_LIBRARY NAMES libboost_system.a HINTS ${BOOST_LIBRARYDIR} )
target_link_libraries(${PROJECT_NAME} ${boost_system_LIBRARY})
find_library( boost_filesystem_LIBRARY NAMES libboost_filesystem.a HINTS ${BOOST_LIBRARYDIR} )
target_link_libraries(${PROJECT_NAME} ${boost_filesystem_LIBRARY})
find_library( boost_thread_LIBRARY NAMES libboost_thread.a HINTS ${BOOST_LIBRARYDIR} )
target_link_libraries(${PROJECT_NAME} ${boost_thread_LIBRARY})
find_library( boost_date_time_LIBRARY NAMES libboost_date_time.a HINTS ${BOOST_LIBRARYDIR} )
target_link_libraries(${PROJECT_NAME} ${boost_date_time_LIBRARY})
find_library( boost_chrono_LIBRARY NAMES libboost_chrono.a HINTS ${BOOST_LIBRARYDIR} )
target_link_libraries(${PROJECT_NAME} ${boost_chrono_LIBRARY})

# 系统库			 
find_library(curl-lib NAMES curl PATHS /lib64)
target_link_libraries(${PROJECT_NAME} ${curl-lib})
# find_library(z-lib z)
# target_link_libraries(${PROJECT_NAME} ${z-lib})
# find_library(ssl-lib ssl)
# target_link_libraries(${PROJECT_NAME} ${ssl-lib})
# find_library(crypto-lib crypto)
# target_link_libraries(${PROJECT_NAME} ${crypto-lib})
find_library(rt-lib rt)
target_link_libraries(${PROJECT_NAME} ${rt-lib})
find_library(pthread-lib pthread)
target_link_libraries(${PROJECT_NAME} ${pthread-lib})

2. cmake/LocalPaths.cmake

# 项目开关
option (OPEN_ALL "open all" OFF)

# 环境变量
set( NAUT_ROOTDIR "$ENV{NAUT_ROOTDIR}" )
set( ESUNNY_QUOTE_PUBLIC "$ENV{ESUNNY_QUOTE_PUBLIC}" )

# 基础变量
set( THIRD_PARTY_ROOT "${NAUT_ROOTDIR}/thirdparty" )
set( PROJECT_SLIB "${CMAKE_SOURCE_DIR}/slib" )
set( PROJECT_BIN_LIB "${CMAKE_SOURCE_DIR}/bin/lib" )

# thirdparty
set( BOOST_ROOT "${THIRD_PARTY_ROOT}/boost_1_65_0" )
set( BOOST_INCLUDEDIR ${BOOST_ROOT} ) 
set( BOOST_LIBRARYDIR ${BOOST_ROOT}/linux )

set( XERCES_C_ROOT "${THIRD_PARTY_ROOT}/xerces-c-3.2.2" )
set( XERCES_C_INCLUDEDIR ${XERCES_C_ROOT}/include ) 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值