cmake入门使用

在Linux平台下研发,我们大多数的项目管理工具是Makefile,最近火起来的cmake工具大有取代make的趋势,因为它是跨平台的,可以用cmake生成vs专用的vsproj文件,也可以使用cmake生成Linux平台下的makefile文件,下面开始最简单的cmake使用,首先做一点知识预备:

我们执行make的时候需要有Makefile文件存在,做支持;cmake同样有这样的需求,cmake要想能够成功运行需要有CMakeLists.txt文件存在,做支持。cmake中有自己的环境变量,如CMAKE_SOURCE_DIR指的就是存放CMakeLists.txt文件的路径。为了大型项目编译方便,一般情况我们为整个项目创建一个CMakeLists.txt文件,然后为每个子项目创建*.cmake文件,然后将这些cmake文件引入到CMakeLists.txt文件中。还有cmake最终能编译是因为它生成了Makefile文件,只不过生成的不止是Makefile文件还有一些附带的临时文件,所以我们一般创建一个build文件夹来执行cmake命令,以防这些临时文件污染源代码。

在目录src下创建Hello.cpp文件,然后建立cmake工具使用的CMakeLists.txt文件,CMakeLists.txt文件内容如下:

project(Hello)
add_executable(Hello Hello.cpp)

在src目录下创建build文件夹(执行cmake会生成cmake专用文件,创建该文件夹的目的是防止cmake垃圾影响源代码)

在build文件夹中执行"cmake .."即可生成编译项目所需的Makefile文件

生成makefile文件后,即可按照我们日常使用Makefile那样生成最终的可执行程序。

上面介绍的是cmake的基本入门使用,接下来我们介绍一点复杂的可用于大型项目的cmake模板,首先我们创建一个CMakeLists.txt文件,然后为每个子项目创建一个对应的.cmake 文件,最后将这些cmake文件包含在CMakeLists.txt中:

CMakeLists.txt:

cmake_minimum_required(VERSION 2.8.12)

project(project_name C CXX)

set(CMAKE_BUILD Debug)
set(project_name_VERSION_MAJOR 1)
set(project_name_VERSION_MINOR 0)

set(root_dir ${CMAKE_SOURCE_DIR})
set(proto_dir ${root_dir}/proto)
set(rpc_dir ${root_dir}/rpc)
set(utils_dir ${root_dir}/utils)

if(NOT lib_path)
	set(lib_path ${root_dir}/lib)
endif()

if(NOT runtime_path)
	set(runtime_path ${root_dir}/bin)
endif()

set(LIBRARY_OUTPUT_PATH ${lib_path})
set(EXECUTABLE_OUTPUT_PATH ${runtime_path})
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
set(include_dirs ${rpc_dir} ${bsm_include_dir} ${module_dir} ${utils_dir} ${bsm_monitor_dir} ${bsm_node_dir})


include(cmake/project_name_sdk.cmake)
include(cmake/project_name_monitor.cmake)
include(cmake/project_name_node.cmake)
include(cmake/project_name_test.cmake)
include(cmake/project_name_video_decoder.cmake)

video_decoder_demuxer.cmake:

#specify src file
set(source_file_list 
	${project_name_video_decoder}/gb28181/project_name_video_decoder_demuxer.cpp 
	${project_name_video_decoder}/gb28181/project_name_video_decoder_demuxer2.cpp
	)

set(libs_ffmpeg4.0_path /usr/local/ffmpeg/lib)
set(libs_ffmpeg4.0
	${libs_ffmpeg4.0_path}/libavformat.so
	${libs_ffmpeg4.0_path}/libavcodec.so
	${libs_ffmpeg4.0_path}/libavfilter.so
	${libs_ffmpeg4.0_path}/libavutil.so
	${libs_ffmpeg4.0_path}/libswscale.so
 	${libs_ffmpeg4.0_path}/libavdevice.so
	${libs_ffmpeg4.0_path}/libswresample.so
  	)

#specity target
add_executable(demuxer_test_exe ${root_dir}/test/project_name_video_decoder_demuxer_test.cpp)

add_library(static_video_decoder_demuxer STATIC ${source_file_list})
add_library(shared_video_decoder_demuxer SHARED ${source_file_list})

set_target_properties(static_video_decoder_demuxer PROPERTIES OUTPUT_NAME "static_video_decoder_demuxer")
set_target_properties(shared_video_decoder_demuxer PROPERTIES OUTPUT_NAME "shared_video_decoder_demuxer")

#specify include dir
include_directories(${project_name_video_decoder})
include_directories(/usr/local/ffmpeg/include/)

#specify library dir
link_directories(/usr/local/ffmpeg/lib)
link_directories(${root_dir}/lib)

#specify library
target_link_libraries(demuxer_test_exe static_video_decoder_demuxer ${libs_ffmpeg4.0})
target_link_libraries(static_video_decoder_demuxer ${libs_ffmpeg4.0})
target_link_libraries(shared_video_decoder_demuxer ${libs_ffmpeg4.0})

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

heibao111728

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值