CMAKE 常用指令
来源:互联网 发布:编程就业方向 编辑:程序博客网 时间:2024/05/19 20:20
CMAKE 常用指令
介绍
CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。他能够输出各种各样的makefile或者project文件,能测试编译器所支持的C++特性,类似UNIX下的automake。
构建过程
在 linux 平台下使用 CMake 生成 Makefile 并编译的流程分3步:
- 编写 CMake 配置文件 CMakeLists.txt 。
- 执行命令 cmake PATH 或者 ccmake PATH 生成 Makefile 。ccmake 和 cmake 的区别在于前者提供了一个交互式的界面。
。其中, PATH 是 CMakeLists.txt 所在的目录。 - 使用 make 命令进行编译。
举个栗子
- CMakeLists.txt 文件:
PROJECT(proj)CMAKE_MINIMUM_REQUIRED(VERSION 2.6)cmake_policy(SET CMP0015 NEW)ADD_SUBDIRECTORY()## 设置编译选项SET(CMAKE_CXX_FLAGS " -g -Wall -std=c++11 ")## 设置变量SET(PROTOBUF /usr/local/include)SET(BOOST_DIR /root/usr/)## include路径INCLUDE_DIRECTORIES(../../include ${BOOST_DIR}/include ${PROTOBUF})## 链接库路径LINK_DIRECTORIES(../../lib/ /usr/local/lib/ ${BOOST_DIR}/lib ${PROTOBUF}/lib)## 设置要编译的源文件SET(SOURCE_FILES main.cpp config.cpp)## 作用是发现一个目录下所有的源代码文件并将列表存储在一个变量中,这个指令临时被用来自动构建源文件列表。AUX_SOURCE_DIRECTORY(. SOURCE_FILES)## 生成可执行文件ADD_EXECUTABLE(proj ${SOURCE_FILES})## 链接库TARGET_LINK_LIBRARIES(proj protobuf boost_system boost_thread)## 存放路径SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/../../../bin/)## 输出详细过程#set(CMAKE_VERBOSE_MAKEFILE ON)
执行
cmake
:
“`
[root build]# cmake ..
– The C compiler identification is GNU 4.8.5
– The CXX compiler identification is GNU 4.8.5
– Check for working C compiler: /usr/bin/cc
– Check for working C compiler: /usr/bin/cc – works
– Detecting C compiler ABI info
– Detecting C compiler ABI info - done
– Check for working CXX compiler: /usr/bin/c++
– Check for working CXX compiler: /usr/bin/c++ – works
– Detecting CXX compiler ABI info
– Detecting CXX compiler ABI info - done
– Configuring done
– Generating done
– Build files have been written to: /data/test/build执行
make
cmake常用指令说明
指定工程名
PROJECT(projectname [CXX] [C] [Java])
设置自定义变量
SET(VAR [VALUE] [CACHE TYPE DOCSTRING [FORCE]])
输出打印信息
MESSAGE([SEND_ERROR | STATUS | FATAL_ERROR] “message to display”…)
输出可执行文件
ADD_EXECUTABLE(hello ${SRC_LIST})
变量名格式 : 在本例我们使用了
来引用变量,这是cmake的变量应用方式,但是,有一些例外,比如在IF控制语句,变量是直接使用变量名引用,而不需要 {},指令是大小写无关的,参数和变量是大小写相关的。但,推荐你全部使用大写指令。添加子目录:
ADD_SUBDIRECTORY(source_dir [binary_dir] [EXCLUDE_FROM_ALL])
指定最终目标二进制的位置:
SET(EXECUTABLE_OUTPUT_PATH
PROJECTBINARYDIR/bin)SET(LIBRARYOUTPUTPATH {PROJECT_BINARY_DIR}/lib)生成静态库或动态库:
ADD_LIBRARY(hello SHARED ${LIBHELLO_SRC})
设置目标库的属性:
如设置输出名: SET_TARGET_PROPERTIES(hello_static PROPERTIES OUTPUT_NAME “hello”)
获取目标库的属性:
GET_TARGET_PROPERTY(VAR target property) GET_TARGET_PROPERTY(OUTPUT_VALUE hello_static OUTPUT_NAME)
头文件搜寻路径:
INCLUDE_DIRECTORIES(/usr/include/hello)
添加需要链接的共享库:
TARGET_LINK_LIBRARIES(main hello)
TARGET_LINK_LIBRARIES(main libhello.a)把整个目录下的文件名放到一个变量里:
AUX_SOURCE_DIRECTORY(. SOURCE_FILES)
如果你需要看到make构建的详细过程,可以使用make VERBOSE=1或者VERBOSE=1 make命令来进行构建。
set(CMAKE_VERBOSE_MAKEFILE ON)
cmake 常用常量
- CMAKE_BINARY_DIR、PROJECT_BINARY_DIR、_BINARY_DIR:这三个变量指代的内容是一致的,如果是 in source 编译,指得就是工程顶层目录如果是 out-of-source 编译,指的是工程编译发生的目录。
- CMAKE_SOURCE_DIR、PROJECT_SOURCE_DIR、_SOURCE_DIR:这三个变量指代的内容是一致的,不论采用何种编译方式,都是工程顶层目录。也就是在 in source 编译时,他跟 CMAKE_BINARY_DIR 等变量一致。
- CMAKE_CURRENT_SOURCE_DIR:指的是当前处理的 CMakeLists.txt 所在的路径
- CMAKE_CURRRENT_BINARY_DIR:如果是 in-source 编译,它跟 CMAKE_CURRENT_SOURCE_DIR 一致,如果是 out-ofsource 编译,他指的是 target 编译目录。
- EXECUTABLE_OUTPUT_PATH 和 LIBRARY_OUTPUT_PATH:分别用来重新定义最终结果的存放目录,前面我们已经提到了这两个变量。
- PROJECT_NAME:返回通过 PROJECT 指令定义的项目名称。
参考资料
- 最为详细的pdf文档:http://sewm.pku.edu.cn/src/paradise/reference/CMake%20Practice.pdf
- CMake常用指令
- CMake常用指令
- CMAKE 常用指令
- cmake常用指令
- Cmake常用指令
- CMAKE 常用指令
- cmake指令
- CMake指令
- cmake常用指令-1 find_package与CMake如何查找链接库详解
- CMake详细的指令
- CMake常见指令总结
- CMake详细的指令
- CMake指令集锦
- cmake指令详解
- cmake指令记录
- CMake几个基本指令
- cmake指令记录
- cmake指令详解
- Android开发实践:Java层与Jni层的数组传递
- 1050. String Subtraction (20)-PAT甲级
- 传统CDN加速不给力,来看适合GIS的Geo-CDN
- kubenetes源码分析之DNS(七)
- 2017去哪儿网前端面试心得
- CMAKE 常用指令
- c++中vector的用法详解
- 通过 命令提示符(cmd.exe)连接 Oracle 数据库
- escape(),encodeURI(),encodeURIComponent ajax处理乱码
- shell指令 grep -r
- ListView使用Android提供的进行单选多选
- Unity 接讯飞语音SDK
- OIS输入系统
- [Echarts可视化] 一.入门篇之简单绘制中国地图和贵州地区