linux 下使用CMake编译程序

来源:互联网 发布:矩阵式led大灯有必要吗 编辑:程序博客网 时间:2024/05/17 22:18

一、基本流程
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 opencvfind_package(OpenCV)if(NOT OpenCV_FOUND)  message(WARNING "OpenCV not found!")else()  include_directories(${OpenCV_INCLUDE_DIRS})endif()# headersinclude_directories(${PROJECT_SOURCE_DIR}/include)set(SRC ${PROJECT_SOURCE_DIR}/src/test.cpp)#lib linklink_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/