linux 下使用CMake编译程序

一、基本流程
1、编写CMake配置文件CMakeList.txt;
2、执行cmake PATH ,其中PATH为CMakeList.txt所在的目录;
3、make.

二、相关语法
1、CMakeList.txt由命令、注释和空格组成。其中命令不区分大小写,使用‘#’进行注释,命令由命令名称、小括号和参数组成,多个参数间使用空格进行隔开;

2、cmake_minimum_required(version 3.1.0):指定运行CMakeList所需的CMake的最低版本为3.1.0;

3、project(Test):指定项目名称为 Test;

4、aux_source_directory(. src):查找当前目录下的所有源文件,将文件名保存到src;

5、add_subdirectory(sub):包含子目录 sub。在编译时先编译子目录下的CMakeLists.txt和源码;

6、include_directories(${xxx}):包含目录,指定头文件的搜索路径;

7、link_directories(${xxx}):包含库目录,指定外部动态或静态链接库的搜索路径;

8、 add_definitions(xxx):指定编译参数,如(-std=c++11);

9、target_link_libraries:指明编译程序所需的链接库;

10、add_executable(Test ${src}):将src包含的源文件编译生成可执行文件 Test;

11、add_library(Test STATIC /SHARED ${src}):将src所包含的源文件编译成静态/动态链接库;

12、find_package(name):调用预定义在 CMAKE_MODULE_PATH 下的 Find< name >.cmake 模块;

13、message(“xxx”):打印消息;

14、PROJECT_SOURCE_DIR:cmake预定义变量,表示工程的根目录;

15、set(src ${PROJECT_SOURCE_DIR}/src/test.cpp):自定义变量 src为对应目录下的文件test.cpp。

还有很多命令,目前只用到了这么多,后续用到再进行记录。

三、一个例子

cmake_minimum_required(VERSION 3.9.0)

project(Test)
add_definitions(-std=c++11)

# use opencv
find_package(OpenCV)
if(NOT OpenCV_FOUND)
  message(WARNING "OpenCV not found!")
else()
  include_directories(${OpenCV_INCLUDE_DIRS})
endif()

# headers
include_directories(${PROJECT_SOURCE_DIR}/include)

set(SRC ${PROJECT_SOURCE_DIR}/src/test.cpp)

#lib link
link_directories(${PROJECT_SOURCE_DIR}/lib)
add_executable(Test ${SRC})
target_link_libraries(Test ${OpenCV_LIBS})

这是一个调用opencv进行人脸检测的配置文件,需要将相关文件放在对应目录。在CMakeList.txt目录下执行:

cmake .

进行编译:
这里写图片描述

接着执行: make,就会生成对应的可执行文件或链接库。

四、参考资料

在学习Linux下使用cmake编译程序过程中,参考了多位博主写的博文,以下是相关链接:
http://blog.csdn.net/fengbingchun/article/details/46685413
http://www.cnblogs.com/never–more/p/6921837.html
http://www.hahack.com/codes/cmake/

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值