1、链接静态库和动态库
target_link_libraries(可执行文件, -Wl,--start-group, ${CMAKE_CURRENT_SOURCE_DIR}/libs/libzlog/libzlog.a, -Wl,--end-group)
链接库链接:-Wl,--start-group与Wl,--end-group是一组group,表示组内的静态库不存在先后顺序。
2、设置编译flag
if (UNIX AND NOT APPLE)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -Wall -D__STDC_CONSTANT_MACROS")
elseif (UNIX AND APPLE)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -Wall -D__STDC_CONSTANT_MACROS")
endif (UNIX AND NOT APPLE)
3、增加编译选项
if(CMAKE_COMPILER_IS_GNUCXX)
set(CMAKE_CXX_FLAGS "-std=c++11 ${CMAKE_CXX_FLAGS}")
message(STATUS "optional:-std=c++11")
endif(CMAKE_COMPILER_IS_GNUCXX)
4、根据release和debug设置编译选项
if(DEFINED ${CMAKE_BUILD_TYPE} AND ${CMAKE_BUILD_TYPE} STREQUAL "Release")
set(CMAKE_C_FLAGS_RELEASE "$ENV{CFLAGS} -rdynamic -O2 -Wall")
set(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -rdynamic -O2 -Wall")
else()
set(CMAKE_C_FLAGS_DEBUG "$ENV{CFLAGS} -rdynamic -O0 -Wall -g2 -ggdb")
set(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -rdynamic -O0 -Wall -g2 -ggdb")
endif()
5、搜索相应的库
if (UNIX AND APPLE)
find_package(FFmpeg REQUIRED COMPONENTS
abcd abcd abcd abcd abcd abcd abcd)
include_directories(${FFMPEG_INCLUDE_DIRS})
elseif (UNIX AND NOT APPLE)
find_package(PkgConfig)
pkg_check_modules(FFmpeg REQUIRED
libabcd
libcdef
libcdef
libcdef
libcdef
libcdef
libcdef)
message(${FFmpeg_LIBRARIES})
include_directories(${FFmpeg_INCLUDE_DIRS})
link_directories(${FFmpeg_LIBRARY_DIRS})
endif (UNIX AND APPLE)
5、增加包含有CMakeLists.txt的工程目录
add_subdirectory(ms)
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/libs/libabc)
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/libs/libefg)
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/libs/libhij)
6、引入boost库
set(Boost_USE_STATIC_LIBS ON)
find_package(Boost 1.60 COMPONENTS program_options REQUIRED)
include_directories(${Boost_INCLUDE_DIR})
7、引入功能头文件
${CMAKE_CURRENT_SOURCE_DIR}
${CMAKE_CURRENT_SOURCE_DIR}/include
8、引入源文件
file(GLOB SRC_LIST "src/*.cpp" "ms/*.cpp")
9、生成可执行文件
#生成可执行文件
add_executable(test ${SRC_LIST})
10、链接静态和动态库
target_link_libraries(
mdc-rtc-miexex
-Wl,--start-group
${CMAKE_CURRENT_SOURCE_DIR}/libs/libabc/build/libabc.a
${Boost_LIBRARIES}
${FFmpeg_LIBRARIES}
ssl crypto rt pthread
-Wl,--end-group
)