(参考:https://www.cnblogs.com/dverdon/p/4574221.html)
1、cmake_minimum_required(VERSION 2.8)
cmake最低版本,如果CMake的当前版本低于指定的版本,它会停止处理工程文件,并报告错误
2、project(
projectname:工程名
languageName:指定工程可以支持的语言。如project(Hello,C CXX),CXX即是C++
3、set( CMAKE_CXX_FLAGS "-std=c++11" )
添加c++11标准支持
4、find_package(包的名称及最低版本)
找到后面需要库和头文件的包
例如find_package(OpenCV 2.4.3 REQUIRED)
5、include_directories("路径")
头文件
#include_directories(
${PROJECT_SOURCE_DIR}
${PROJECT_SOURCE_DIR}/include
${EIGEN3_INCLUDE_DIR}
6、set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/lib)
设置路径(下面生成共享库的路径),即生成的共享库在工程文件夹下的lib文件夹中
7、add_library(${PROJECT_NAME} SHARED src/cpp文件名 …… )
创建共享库(把工程内的cpp文件都创建成共享库文件,方便通过头文件来调用)
这时候只需要cpp,不需要有主函数
${PROJECT_NAME}是生成的库名 表示生成的共享库文件就叫做 lib工程名.so
也可以专门写cmakelists来编译一个没有主函数的程序来生成共享库,供其它程序使用
8、target_link_libraries(${PROJECT_NAME} /usr/lib/i386-linux-gnu/libboost_system.so )
链接库,把刚刚生成的${PROJECT_NAME}库和所需的其它库链接起来
9、set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/bin)
设置可执行文件生成路径
10、add_executable(要生成的可执行文件名 从工程目录下写起的主函数文件名)
可执行文件生成,凡是要编译的源文件都需要列举出来。
add_executable(hello_world src/hello_world.cpp src/main.cpp)
11、target_link_libraries(可执行文件名 ${PROJECT_NAME})
这个添加可执行文件所需的库(一般就是刚刚生成的工程的库),比如我们用到了libm.so(命名规则:lib+name+so),就添加该库的名称"m"
12、set(
)
将一个CMAKE变量设置为给定值
SET(CMAKE_BUILD_TYPE Release)
设置编译方式为Release,如果要求有比较高德运行方式,建议选择Release
如:
IF(NOT CMAKE_BUILD_TYPE)
SET(CMAKE_BUILD_TYPE Release)
13、AUX_SOURCE_DIRECTORY(src DIR_SRCS)
源文件目录
14、cmake_policy
管理CMake的策略设置
C++创建工程如下:
$mkdir hellotest
$cd hellotest
$mkdir bin #可执行文件存放路径
$mkdir lib #生成的.so文件存放路径
$mkdir include #头文件存放路径
$mkdir src #源文件存放路径
$mkdir build #编译文件存放路径
$touch CMakeLists.txt
$cd build
$cmake ..
$make