一个简单的c/c++程序可以直接通过命令行手动编译,但是复杂的程序还是使用cmake自动编译更方便,并且程序结构层次也更清晰。这个时候需要根据实际情况适当编辑CMakeLists.txt文件。下面通过一个简单的实例说明cmake与CMakeLists.txt的应用。
- 新建一个文件夹,如Helloword-ws
- 在此文件夹中,建如下几个子文件夹,bin,lib,include和src,其中,
bin 用来存放编译好的可执行二进制文件;
lib 用来存放编译好的库文件;
include 用来存放头文件;
src 用来存放源代码. - 编辑源程序
cd src
gedit Helloword.cpp
#include <iostream>
int main(int argc, char**argv)
{
std::cout<<"Hello word!"<<std::endl;
return 0;
}
- 编辑顶层目录的CMakeLists.txt
cd ..
gedit CMakeLists.txt
CMAKE_MINIMUM_REQUIRED( VERSION 3.1 ) #设定版本
PROJECT( Helloword-ws ) #设定工程名/命名空间名
SET( CMAKE_CXX_COMPILER "g++") #设定编译器
#设定可执行二进制文件的目录
SET( EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
#设定存放编译出来的库文件的目录
SET( LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)
#并且把该目录设为连接目录,使库文件能链接到可执行文件
LINK_DIRECTORIES( ${PROJECT_SOURCE_DIR}/lib)
#设定头文件目录
INCLUDE_DIRECTORIES( ${PROJECT_SOURCE_DIR}/include)
#增加子文件夹,也就是进入源代码文件夹继续构建,需要相应在src文件夹增加CMakeLists.txt
ADD_SUBDIRECTORY( ${PROJECT_SOURCE_DIR}/src)
然后,在src文件夹中,编辑子目录的CMakeLists.txt
cd src
gedit CMakeLists.txt
#在此文件中添加可执行文件
ADD_EXECUTABLE( main main.cpp )
- 编译
cd ..
mkdir build & cd build
camke ..
make
- 生成可执行程序
按照顶层目录CMakeLists.txt的路径设置,在bin 文件夹中生产了可执行程序。
对cmake与CMakeLists.txt的更深刻的描述可参阅CMAKE相关的文献,此处不再赘述。
文献
[1]一起做RGB-D SLAM (1)