CMake是一个跨平台的编译工具,类似于automake

安装

# cd cmake-2.8.10.2
# ./bootstrap
# make
# make install

project

project(<projectname> [CXX] [C] [JAVA])

定义工程的名称的和支持的语言。这一行会引入两个变量(HELLO_BINARY_DIR 和 HELLO_SOURCE_DIR)

set

set(VAR[VALUE] [CACHE TYPE DOCSTRING [FORCE]])

显式的定义变量

set(SRC_LIST hello.c)

message

message([SEND_ERROR | STATUS | FATAL_ERROR] "message to display" ...)

向终端输出用户信息

  • SATUS:输出信息
  • SEND_ERROR:产生错误,生成过程被跳过
  • FATAL_ERROR:立即终止所有cmake过程
message(STATUS "This is SOURCE dir" ${HELLO_SOURCE_DIR})

add_executable

add_executable(<name> [WIN32] [MACOSX_BUNDLE] [EXCLUDE_FROM_ALL]
source1 source2 ... sourceN)

使用给定的源文件,为工程引入一个可执行文件

add_executable(${PROJECT_NAME} ${SRC_LIST})

举例

project(hello C CXX)

set(SRC_LIST helloworld.c)

MESSAGE(STATUS "This is BINARY dir " ${HELLO_BINARY_DIR})
message(STATUS "This is SOURCE dir "${CMAKE_SOURCE_DIR}) add_executable(${PROJECT_NAME} ${SRC_LIST})

常用变量名

  • PROJECT_NAME:PROJECT 指令定义的项目名称
  • CMAKE_SOURCE_DIR/PROJECT_SOURCE_DIR:工程顶层目录
  • CMAKE_CURRENT_LIST_FILE:这个变量的 CMakeLists.txt 的完整路径
  • CMAKE_CURRENT_LIST_LINE:这个变量所在的行
  • EXECUTABLE_OUTPUT_PATH/LIBRARY_OUTPUT_PATH:最终结果的存放目录

常用指令

include_directories:程序所需头文件的位置

include_directories("./include") 

link_directories:程序所需库文件的位置

link_directories("./lib") 

target_link_libraries:链接库名称

target_link_libraries(${PROJECT_NAME} pthread)
target_link_libraries(${PROJECT_NAME} -lzlog)

:target_link_libraries要放到add_executable后面,不然报如下错误

CMake Error at CMakeLists.txt:11 (target_link_libraries):
Cannot specify link libraries for target "lwm2mclient" which is not built
by this project.

BUILD_SHARED_LIBS:生成的为动态库

SET(BUILD_SHARED_LIBS ON)

ADD_LIBRARY:定义生成的库的名字,以及类型和需要的源文件

ADD_LIBRARY(libname [SHARED|STATIC|MODULE] [EXCLUDE_FROM_ALL] source1 source2 ... sourceN)

ADD_LIBRARY(myhello ${SRC_LIST}) //名字不要冲突

# make
[ 50%] Built target hello
Scanning dependencies of target myhello
[100%] Building C object CMakeFiles/myhello.dir/helloworld.o
Linking C static library libmyhello.a

ADD_DEFINITIONS:添加-D定义。使#ifdef ENABLE_DEBUG生效

ADD_DEFINITIONS(-DENABLE_DEBUG ...)

ADD_TEST/ENABLE_TESTING:

ADD_TEST(testname exename arg1 arg2 ...)
ADD_TEST(mytest ./bin/hello)
ENABLE_TESTING()

AUX_SOURCE_DIRECTORY:临时构建源文件列表。发现一个目录下所有源代码文件并将列表存储在一个变量中

AUX_SOURCE_DIRECTORY(dir VARIABLE)
ADD_EXECUTABLE(${PROJECT_NAME} ${SRC_LIST})

CMAKE_MINIMUM_REQUIRED:版本限制

CMAKE_MINIMUM_REQUIRED(VERSION versionNumber [FATAL_ERROR])
CMAKE_MINIMUM_REQUIRED(VERSION 2.8 FATAL_ERROR)

INSTALL:make install使用

INSTALL(PROGRAMS bin/hello DESTINATION bin)

# cmake -DCMAKE_INSTALL_PREFIX=./demo/ .
# make install
Install the project...
-- Install configuration: ""
-- Installing: /home/thomas/demo/bin/hello

添加gdb调试

# cmake -DCMAKE_BUILD_TYPE=Debug .

最新文章

  1. mysql服务器监控参数总结
  2. 如何解决子元素设了margin-top之后父元素所受的影响
  3. 【python】面向对象
  4. ElasticSearch实战-入门
  5. Visual Studio 2008 使用 WinCE 5.0 Emulator
  6. 2013年8月份第2周51Aspx源码发布详情
  7. Linux 的多线程编程的高效开发经验(转)
  8. hdu1248
  9. Android开发者必须深入学习的10个应用开源项目
  10. 信号处理引发的cpu高
  11. Leetcode 8 Two Pointers
  12. 使用JFlex生成词法分析器 1:安装配置
  13. restfull api交互常用状态码
  14. VS Code 的常用快捷键和插件
  15. 头像上传uploadPreview插件
  16. oracle 删除重复数据
  17. RabbitMQ之总结
  18. 怎么让一段xml被识别为字符串
  19. CLR via 笔记 5.3 值类型的装箱和拆箱
  20. Unix系统编程()open,read,write和lseek的综合练习

热门文章

  1. ES6深入浅出-13 Proxy 与 Reflect-2.Proxy 代理
  2. C++构造函数以及何时被调用
  3. akka java
  4. Eclipse JEE 2018.12R TUNA源直接下载地址
  5. IIS+PHP本地开发环境配置
  6. APT攻击与银行
  7. jvm(5)---垃圾回收(回收算法和垃圾收集器)
  8. VS混淆/反编译/远程调试/Spy++的Tools工具
  9. 学习记录:《C++设计模式——李建忠主讲》7.“领域规则”模式
  10. 实现不同分辨率、不同浏览器下高度自适应、iframe高度自适应