cmake编译注意点

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
)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值