Cmake 学习笔记
日期:2020/08/28
参考:github_cmake_practice
手册:cmake-practice.pdf
Cmake工具是一款很不错的跨平台项目构建工具,能够较好地解决源码基于不同平台的构建问题。在网上找到了一个入门级的cmake项目进行学习,本文记录一些学习笔记方便日后查看。
基本用法
下面是最基本的cmake使用方法,通常我们在项目根目录的CMakeLists.txt中进行如下配置:
1 2 3 4 5 6 7 8 9
| CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
PROJECT(Hello)
SET(SRC_LIST main.cpp) MESSAGE(STATUS "This is some message: " ${SRC_LIST})
ADD_EXECUTABLE(hello ${SRC_LIST}) ADD_SUBDIRECTORY(src bin)
|
值得注意的是:
常用的调用方案
常用的构建+安装过程:
1 2 3
| cmake -DCMAKE_INSTALL_PREFIX=/usr/tmp .. make make install
|
一些构建/安装选项:
1 2 3 4 5 6 7
| make VERBOSE=1 make clean
../configure -enable-static
# lld 命令用于查看目标文件的链接情况 lld src/main
|
指定子目录/静态库/动态库
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| ADD_EXECUTABLE(hello main.cpp) ADD_SUBDIRECTORY(src bin)
ADD_LIBRARY(hello main.cpp) SET_TARGET_PROPERTIES(hello_static PROPERITIES OUTPUT_NAME "hello") SET_TARGET_PROPERTIES(hello_static PROPERITIES CLEAN_DIRECT_OUTPUT 1) GET_TARGET_PROPERTY(OUTPUT_VALUE hello_static OUTPUT_NAME)
ADD_LIBRARY(hello SHARED main.cpp) SET_TARGET_PROPERTIES(hello PROPERITIES OUTPUT_NAME "hello") SET_TARGET_PROPERTIES(hello PROPERITIES CLEAN_DIRECT_OUTPUT 1) SET_TARGET_PROPERTIES(hello PROPERITIES VERSION 1.2 SOVERSION 1)
INCLUDE_DIRECTORIES(/usr/tmp/include) FIND_PATH(myHeader hello.h) IF(myHeader) INCLUDE_DIRECTORIES(${myHeader}) ENDIF(myHeader)
LINK_DIRECTORIES(/usr/tmp/lib) TARGET_LINK_LIBRARIES(main libhello.so)
|
- 注意完整的头文件、执行文件、调用库顺序为:参考博客
1 2 3 4 5 6 7
| INCLUDE_DIRECTORIES(/usr/tmp/include) LINK_DIRECTORIES(/usr/tmp/lib)
ADD_EXECUTABLE(hello main.cpp)
TARGET_LINK_LIBRARIES(main libhello.so)
|
安装程序
安装的过程感觉就是一种将整个项目复制到另一个指定目录,并按顺序链接好的过程。
1 2 3 4 5 6 7 8
| INSTALL(TARGETS main.cpp hello hello_static RUNTIME DESTINATION bin LIBRARY DESTINATION lib ARCHIVE DESTINATION lib)
INSTALL(FILES hello.h DESTINATION /usr/tmp/include) INSTALL(PROGRAMS run_hello.sh DESTINATION /usr/tmp/bin) INSTALL(DIRECTORY doc DESTINATION /usr/tmp/shared/doc)
|
常用变量
这里列举了一些常用的变量,更多的内容可以直接查阅手册:cmake-practice.pdf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| PROJECT_NAME
<project_name>_BINARY_DIR / CMAKE_BINARY_DIR / PROJECT_BINARY_DIR
<project_name>_SOURCE_DIR / CMAKE_SOURCE_DIR / PROJECT_SOURCE_DIR
EXECUTABLE_OUTPUT_PATH LIBRARY_OUTPUT_PATH
CMAKE_INSTALL_PREFIX
CMAKE_CURRENT_SOURCE_DIR CMAKE_CURRENT_LIST_DIR CMAKE_CURRENT_BINARY_DIR
CMAKE_MODULE_LIST
|
还有两个相关的环境变量:
1 2 3 4
| CMAKE_INCLUDE_PATH CMAKE_LIBRARY)PATH
|
其他
1
| AUX_SOURCE_DIRECTORY(dir VARIABLE)
|