使用CMake生成makefile文件

CMake 简介

CMake 是一个跨平台的自动化建构系统,它使用一个名为 CMakeLists.txt 的文件来描述构建过程,可以产生标准的构建文件,如 Unix 的 Makefile 或Windows Visual C++ 的 projects/workspaces 。文件 CMakeLists.txt 需要手工编写,也可以通过编写Python脚本进行半自动的生成。CMake 提供了比 autoconfig 更简洁的语法。在 linux 平台下使用 CMake 生成 Makefile 并编译的流程如下:
(1)编写 CmakeLists.txt,并将其放置于工程目录下(如果有子目录,子目录也需要写此文件);
(2)在工程目录执行命令“cmake .或者“ccmake .”生成 Makefile (需要安装:sudo apt-get install cmake);
(3)使用 make 命令进行编译。

单文件的CMakeLists.txt

现假设我们的项目中只有一个源文件 main.cpp

#include<iostream>
using namespace std;
int main()
{
   cout<<"Hello word!"<<endl;
   return 0;
}

为了构建该项目,我们需要编写文件 CMakeLists.txt 并将其与 main.cpp 放在同一个目录下:

//CMakeLists.txt
PROJECT(main)
CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
AUX_SOURCE_DIRECTORY(. DIR_SRCS)
ADD_EXECUTABLE(main ${DIR_SRCS})

CMakeLists.txt的语法比较简单,由命令、注释和空格组成,其中命令是不区分大小写的:
(1)符号”#”后面的内容被认为是注释。
(2)命令由命令名称、小括号和参数组成,参数之间使用空格进行间隔。例如CMakeLists.txt文件的第一行是一条命令,名称是 PROJECT ,参数是 main ,该命令表示项目的名称是 main 。第二行的命令限定了 CMake 的版本。第三行使用命令AUX_SOURCE_DIRECTORY将当前目录中的源文件名称赋值给变量DIR_SRCS。CMake手册中对命令 AUX_SOURCE_DIRECTORY 的描述如下:

aux_source_directory(<dir> <variable>)

该命令会把参数 dir中所有的源文件名称赋值给参数variable。第四行使用命令ADD_EXECUTABLE指示变量 DIR_SRCS 中的源文件需要编译成一个名称为 main 的可执行文件。

完成了文件 CMakeLists.txt 的编写后需要使用 cmake 或 ccmake 命令生成Makefile 。 ccmake 与命令 cmake 的不同之处在于 ccmake 提供了一个图形化的操作界面。cmake 命令的执行方式如下:

cmake [options] <path-to-source>

进入了 main.cpp 所在的目录后执行 “cmake .” 后就可以得到 Makefile 并使用 make 进行编译。

多目录下的CMakeLists.txt

1、目录结构
这里写图片描述
2、主目录下的CMakeLists.txt

# cmake needs this line
cmake_minimum_required(VERSION 2.8)

# Define project name
project(cameraProject)
#指明本项目包含一个子目录

# 查找当前目录下的所有源文件
# 并将名称保存到 DIR_SRCS 变量
aux_source_directory(. DIR_SRCS)

#增加头文件目录(该目录下只有头文件),如果一个目录下有头文件也有源文件,则需要增加模块目录,而不用增加头文件目录
include_directories(./include)

#增加模块目录
add_subdirectory(source)

#添加系统关联库
link_libraries(xmnetsdk pthread)

# Find OpenCV, you may need to set OpenCV_DIR variable
# to the absolute path to the directory containing OpenCVConfig.cmake file
# via the command line or GUI
#find_package(OpenCV REQUIRED)

# Add OpenCV headers location to your include paths
#include_directories(${OpenCV_INCLUDE_DIRS})

# 指定生成目标
add_executable(main ${DIR_SRCS})

#指明可执行文件main需要连接一个名为ModifyConfig的链接库
target_link_libraries(main source_lib)
# Link your application with OpenCV libraries
#target_link_libraries(cameraserver ${OpenCV_LIBS})

3、source下的CMakeLists.txt

aux_source_directory(. DIR_SOURCE_SRCS)
add_library(source_lib ${DIR_SOURCE_SRCS})

4、在主目录下运行cmake . 和make生成可执行文件main
这里写图片描述
5、运行可执行文件./main
这里写图片描述

参考链接

http://blog.sina.com.cn/s/blog_627927570102vq28.html
https://blog.csdn.net/gsls181711/article/details/40376701

猜你喜欢

转载自blog.csdn.net/gsh_hello_world/article/details/80230650