1 Star 0 Fork 0

散漫小主 / Sinetlib

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
CMakeLists.txt 3.26 KB
一键复制 编辑 原始数据 按行查看 历史
斯内克 提交于 2018-10-21 18:41 . update CMakeList
project (Sinetlib)
cmake_minimum_required (VERSION 2.8)
# 如果没有设置这个环境变量,则默认设置为Release,可在build.sh中加上-D选项设置
if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE "Release")
endif()
# 设置编译器
set(CMAKE_CXX_COMPILER "g++")
# 设在c++11及开启所有警告
set(CMAKE_CXX_FLAGS "-std=c++11 -Wall")
# 当编译类型为Debug时,不优化、开启调试信息、针对gdb生成更详细的调试信息
set(CMAKE_CXX_FLAGS_DEBUG "-O0 -g -ggdb")
# 当编译类型为Release时,开启高级优化
set(CMAKE_CXX_FLAGS_RELEASE "-O3")
# 输出编译类型
message(STATUS "BUILD_TYPE: " ${CMAKE_BUILD_TYPE})
# 把编译类型转换为大写存入BUILD_TYPE
string(TOUPPER ${CMAKE_BUILD_TYPE} BUILD_TYPE)
# 输出编译选项
message(STATUS "CXXFLAGS: " ${CMAKE_CXX_FLAGS} " " ${CMAKE_CXX_FLAGS_${BUILD_TYPE}})
# 设置库的输出路径,PROJECT_BINARY_DIR在此处是执行cmake的目录
set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib)
# 设置可执行文件的输出路径
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)
# 设置安装库的路径
set(INSTALL_PATH_LIB lib)
# 设置安装头文件的路径
set(INSTALL_PATH_INCLUDE include)
# src下所有源码目录
set(SRC_LIST "log" "base" "net" "http")
# 遍历所有源码目录
foreach(SUB_DIR ${SRC_LIST})
# 将该目录设置为头文件目录,不然在编译时会找不到头文件
include_directories(${PROJECT_SOURCE_DIR}/src/${SUB_DIR})
# 将目录下的源文件(即.cpp)存入SUB_LIST,后面会用到
aux_source_directory(src/${SUB_DIR} SUB_LIST)
# 将目录下的头文件(匹配*.h)安装到CMAKE_INSTALL_PREFIX/INSTALL_PATH_INCLUDE
# 前者我们没定义,默认是/usr/local,因此实际安装路径为/usr/local/include
# 该动作会在make执行完后执行make install时执行,实际上就是把这些头文件复制到对应目录,这样别人在使用我们的库时就可以直接像系统头文件一样使用
install(DIRECTORY src/${SUB_DIR}/ DESTINATION ${INSTALL_PATH_INCLUDE} FILES_MATCHING PATTERN "*.h")
endforeach()
# 将所有源文件打包成动态库Sinetlib_shared
add_library(${CMAKE_PROJECT_NAME}_shared SHARED ${SUB_LIST})
# 链接到需要的库pthread
target_link_libraries(${CMAKE_PROJECT_NAME}_shared pthread)
# 将生成的库文件名改为Sinetlib(系统会自动扩为libSinetlib.so)
set_target_properties(${CMAKE_PROJECT_NAME}_shared PROPERTIES OUTPUT_NAME "${CMAKE_PROJECT_NAME}")
# 安装到/usr/local/lib,同样的,在执行make install时才会执行
install(TARGETS ${CMAKE_PROJECT_NAME}_shared ARCHIVE DESTINATION ${INSTALL_PATH_LIB} LIBRARY DESTINATION ${INSTALL_PATH_LIB})
# 将所有源文件打包成静态库Sinetlib_static
add_library(${CMAKE_PROJECT_NAME}_static STATIC ${SUB_LIST})
# 链接到需要的库pthread
target_link_libraries(${CMAKE_PROJECT_NAME}_shared pthread)
# 将生成的库文件名改为Sinetlib(系统会自动扩为libSinetlib.a)
set_target_properties(${CMAKE_PROJECT_NAME}_static PROPERTIES OUTPUT_NAME "${CMAKE_PROJECT_NAME}")
# 安装到/usr/local/lib,同样的,在执行make install时才会执行
install(TARGETS ${CMAKE_PROJECT_NAME}_static ARCHIVE DESTINATION ${INSTALL_PATH_LIB})
# 添加子目录,这样example目录下的CMakeLists.txt也会被执行
add_subdirectory(example)
1
https://gitee.com/YuXiaoXiang_930/Sinetlib.git
git@gitee.com:YuXiaoXiang_930/Sinetlib.git
YuXiaoXiang_930
Sinetlib
Sinetlib
master

搜索帮助

53164aa7 5694891 3bd8fe86 5694891