目录
前置知识:视觉SLAM十四讲2.4.5小节
一、引入
build project的方法:
- make (编辑Makefiles)
- cmake (编辑CMakeLists.txt)
后者更适合复杂工程。下面介绍cmake。
二、cmake的操作说明
1. 如果工程存在多个目录,每个目录都要有一个CMakeLists.txt。
2. CMakeLists.txt常见内容(指令大小写不敏感):
PROJECT(NAME) # 隐式定义变量NAME_BINARY_DIR,NAME_SOURCE_DIR
SET(SRC_LIST file.c CMAKE_BUILD_TYPE Debug) #显式定义变量
MESSAGE(STATUS "info") #输出
ADD_EXECUTABLE(exe_name ${SRC_LIST}) #为每个文件生成一个可执行文件
ADD_LIBRARY(lib_name lib.cpp)
TARGET_LINK_LIBRARIES(exe_name lib_name)
3. 操作:cmake + make
内部编译时(不mkdir build),NAME_BINARY_DIR=NAME_SOURCE_DIR=工程目录;
外部编译时,NAME_BINARY_DIR=工程目录/build,NAME_SOURCE_DIR=工程目录。
三、复杂工程文件
上述为简单的结构。下面介绍复杂结构工程文件。
1. 结构:
- src
- file.c
- CMakeLists.txt
SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)
SET(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib)
- build
- bin
- lib
- CMakeLists.txt
PROJECT(NAME)
ADD_SUBDERECTORY(src bin) #指定存放源文件、中间二进制文件的位置
2. 安装:
方法1:直接make install
直接make install,则可执行文件 exe_name安装到安装到/usr/bin
或make install SESTDIR=/tmp,将 exe_name安装到安装到/tmp/usr/bin
方法2:打包时指定目录安装(自制sh文件)
1.定义run.sh,内容为调用exe_name。
2. cmake -DCMAKE_INSTALL_PREFIX=/usr . # 默认/usr/local
3.CMakeLists.txt中,加入 INSTALL(PROGRAMS run.sh DESTINATION bin),相对路径为${DCMAKE_INSTALL_PREFIX}
4.make+make install
参考文献
CMake Practice.pdf