关于使用cmake的方式构建动态库及静态库[参考网络大神修改,仅供学习参考]

# 版本限定
CMAKE_MINIMUM_REQUIRED(VERSION 2.8)                       
# 项目名称
PROJECT(test)
# 设置编译器选项:O3优化,显示所有警告(根据实际项目的有求选择性的进行优化)
#SET(CMAKE_C_FLAGS "$ENV{CFLAGS} -O3 -Wall")
# 定义头文件的路径变量
SET(INCLUDE_PATH ${CMAKE_CURRENT_LIST_DIR}/include)
MESSAGE(STATUS "Include Path, ${INCLUDE_PATH}")
# 定义源文件路径变量
aux_source_directory(${CMAKE_CURRENT_LIST_DIR}/src/test1/ SRC_LIST_T1 )
aux_source_directory(${CMAKE_CURRENT_LIST_DIR}/src/test2/ SRC_LIST_T2 )
aux_source_directory(${CMAKE_CURRENT_LIST_DIR}/src/test3/ SRC_LIST_T3 )
aux_source_directory(${CMAKE_CURRENT_LIST_DIR}/src/test4/ SRC_LIST_T4)


LIST (APPEND SRC_LIST_ALL
                ${SRC_LIST_T1}
                ${SRC_LIST_T2}
                ${SRC_LIST_T3}
                ${SRC_LIST_T4}
)

MESSAGE(STATUS "Source Path , ${SRC_LIST_ALL}")
# 包含头文件路径
INCLUDE_DIRECTORIES(${INCLUDE_PATH})
# 添加源文件路径下所有源文件存放到变量中(*.c && *.cpp)
# SET(${SRC_LIST_ALL} SRC_LIST)
# 设置动态库输出路径
SET(LIBRARY_OUTPUT_PATH ${CMAKE_CURRENT_LIST_DIR}/lib)
MESSAGE(STATUS "Library Output Path, " ${CMAKE_CURRENT_LIST_DIR/lib})

#设置编译的部分参数及依赖的库文件等等【如果要编译动态库,则依赖的第三方库必须是fPIC,否则编译出错】
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${LOCAL_W_FLAGS} ${LOCAL_C_FLAGS} -fPIC")
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${LOCAL_W_FLAGS} ${LOCAL_C_FLAGS} -std=c++14 -fPIC")
LINK_DIRECTORIES(${CMAKE_CURRENT_LIST_DIR}/lib/)
LINK_LIBRARIES( z ssl crypto boost_system boost_program_options boost_filesystem boost_date_time boost_context boost_coroutine boost_chrono boost_log boost_thread boost_log_setup boost_regex boost_atomic pthread )

# 生成动态库(test.so)
ADD_LIBRARY(test SHARED ${SRC_LIST_ALL})
# 生成静态库(test.a,target名字只能有一个,所以不能与动态库的名字一样)
ADD_LIBRARY(test_static STATIC ${SRC_LIST_ALL})
# 但是可以通过下面的命令更改静态库target生成的库名,这样就和动态库的名字一样的了
SET_TARGET_PROPERTIES(test_static PROPERTIES OUTPUT_NAME "test")

猜你喜欢

转载自www.cnblogs.com/QQ-354296528/p/8976424.html