官方快速上手教程:https://cmake.org/cmake-tutorial/
转自:http://xiang.lf.blog.163.com/blog/static/127733322201481114456136/
CMake是一个跨平台的程序构建工具,比如起自己编写Makefile方便很多。
介绍:http://baike.baidu.com/view/1126160.htm
本文件不介绍CMake的基本语法,下面是篇不错的入门教程:
http://www.ibm.com/developerworks/cn/linux/l-cn-cmake/
一,首先构建比较简单的工程,来对CMake有个简单的了解
1.构建一个工程的时候,需要做的几件事情(如果下面几件事你知道怎么做了,多大的工程就都不是问题了):
A.源代码在哪里?
B.头文件在哪里?
C.怎么生成静态或者动态库?
D.程序链接的静态库在哪里?
E.如果工程的代码存放在很多地方,那又该怎么找到它们呢?
2.下面从一个最简单的HelloWorld开始,然后一步一步构建一个比较复杂的工程:
A.工程文件如下(只有一个helloworld.cpp源文件):
ciw@ubuntu:~/my_projects/test$ tree .
└── helloworld.cpp
B.这时候,我们要写一个CMakeLists.txt(就3句代码):
PROJECT(hello) #定义整个CMake的工程名
FILE(GLOB SOURCE "./*.cpp") #告诉CMake:工程的源文件在哪里?
ADD_EXECUTABLE(hello ${SOURCE}) #告诉CMake:我们要生成可执行文件(hello),并且源文件是由上面定义的
这样就可以在目录下生成一个hello可执行文件了。
3.下面,我们讲一个带头文件的,而且文件都是存放在不同地方:
A.代码分布如下(main.cpp是main函数,里面调用了hello.h声明的SayHello,定义在hello.cpp中):
ciw@ubuntu:~/my_projects/test$ tree .
├── CMakeLists.txt
├── hello
│ └── hello.cpp
├── include
│ └── hello.h
└── main
└── main.cpp
B.main的代码:
#include "hello.h“
int main()
{
SayHello();
return 0;
}
C.CMakeLists.txt:
1 PROJECT(hello_2)
2
3 FILE(GLOB SOURCE_1 "${CMAKE_SOURCE_DIR}/main/*.cpp") //下面2句告诉CMake,源文件在哪里?main.cpp
4 FILE(GLOB SOURCE_2 "${CMAKE_SOURCE_DIR}/hello/*.cpp")//程序必须链接到hello.cpp里面的SayHello
5
6 INCLUDE_DIRECTORIES("${CMAKE_SOURCE_DIR}/include/")//告诉CMake头文件在哪里?
7
8 ADD_EXECUTABLE(hello_2 ${SOURCE_1} ${SOURCE_2})
4.最后来一个复杂的工程:
A.工程描述:
该工程由一个静态库和一个可执行文件组成,头文件和源文件都不在同一个目录,并且CMake也是独立在一个目录
B.代码分布:
ciw@ubuntu:~/my_projects/test$ tree .
test //工程根目录
├── cmake //CMake目录:代码和CMake编译目录分离
│ ├── bin
│ │ └── main //生成后的可执行文件
│ ├── CMakeLists.txt
│ ├── lib
│ │ └── libhello.a //生成后的静态库
│ └── src
│ ├── CMakeLists.txt
│ ├── hello
│ │ └── CMakeLists.txt
│ └── main
│ └── CMakeLists.txt
├── hello //hello静态库的源代码
│ └── hello.cpp
├── include //头文件
│ └── hello.h
└── main //可执行文件的源代码目录
└── main.cpp
可以看出,CMake里面的每一个子目录都有一个CMakeLists.txt
C.编译该工程的过程:
(a).首先,需要给CMake的一个总入口,这个CMake设置一些全局的变量(cmake/CMakeLists.txt):
PROJECT(hello_3)
SET(PROJECT_ROOT_PATH "${CMAKE_SOURCE_DIR}/../") #工程的根目录,即test
SET(EXECUTABLE_OUTPUT_PATH "${CMAKE_SOURCE_DIR}/bin/") #可执行生成后存放的目录(CMAKE_SOURCE_DIR是cmake目录)
SET(LIBRARY_OUTPUT_PATH "${CMAKE_SOURCE_DIR}/lib/") #静态库生成后存放的目录
INCLUDE_DIRECTORIES("${PROJECT_ROOT_PATH}/include/") #告诉CMake头文件在哪里?
LINK_DIRECTORIES("${CMAKE_SOURCE_DIR}/lib/") #告诉CMake静态库在哪里?
ADD_SUBDIRECTORY(src) #多目录,把src目录加进来,src里面才是真正编译main和hello的
(b).src目录下的CMakeList.txt,这个CMake只是简单地把main目录和hello目录链接起来:
ADD_SUBDIRECTORY(main)
ADD_SUBDIRECTORY(hello)
(c).hello静态库:
FILE(GLOB SOURCE_1 "${PROJECT_ROOT_PATH}/hello/*.cpp") #告诉CMake源文件在哪里?
ADD_LIBRARY(hello STATIC ${SOURCE_1}) #告诉CMake生成的是一个静态库
(d).main可执行文件:
FILE(GLOB SOURCE_1 "${PROJECT_ROOT_PATH}/main/*.cpp") #告诉CMake源文件在哪里?
ADD_EXECUTABLE(main ${SOURCE_1}) #告诉CMake生成一个main可执行文件
TARGET_LINK_LIBRARIES(main hello) #告诉CMake静态库在哪里?
整个编译的过程就是这样了,最主要的是记住上面”构建一个工程的时候,需要做的几件事情:头文件,源文件,静态库这个元素“,那么再复杂的工程都是这样一步一步构建的
相关推荐
CMake 是一个跨平台的构建系统,用于...通过阅读提供的 "cmake教程.pdf" 和 "CMake Practice.pdf",你可以深入了解这些概念,并通过实践进一步巩固你的 CMake 技能。学习 CMake 能让你的跨平台开发变得更加高效和简单。
这个"cmake教程.rar"压缩包很可能是为了帮助用户理解和掌握CMake的使用方法,包括设置项目、编译配置、生成构建文件等核心概念。 CMake的基本工作原理是通过读取一系列名为"CMakeLists.txt"的文本文件,这些文件...
这个“cmake教程”将引导我们深入了解CMake的工作原理和使用方法。 CMake的基本理念是通过一个高层次的、平台无关的描述语言(即CMakeLists.txt文件)来定义构建过程,然后生成特定平台的构建工具所需的项目文件,...
总的来说,CMake教程将带你逐步掌握配置项目、管理依赖、跨平台构建、测试和部署等各个环节,让你在Linux和Windows环境下编写软件变得更加高效和便捷。通过深入学习和实践,你将能够熟练运用CMake解决实际开发中的...
标题:“超详细的cmake教程(去糟粕-重实践-学以致用).pdf” 描述:“以通俗化的语言,深入浅出的介绍了程序构建原理以及cmake的编写方法,使我们能知其然并知其所以然。摒弃长篇大论的一贯作风,去除糟粕,提炼精髓...
【CMake教程】CMake是一种跨平台的构建系统,用于管理软件项目的编译过程。它由Kitware公司和开源社区共同开发,最初是为了支持VTK等工具套件的构建而诞生,现在已经成为一个独立且广泛使用的开源项目。CMake的设计...
CMake教程结合源码的学习方式,为开发者提供了直观和实践性的学习体验。通过这个教程,你可以掌握如何使用CMake管理项目,设置构建环境,处理依赖,以及实现跨平台的构建。对于C++开发者来说,尤其是那些需要在多种...
在"CMake教程"中,你将了解到CMake的基本概念和核心组件,例如`CMakeLists.txt`文件,它是每个CMake项目的入口点,包含了项目的构建指令。以下是一些关键知识点: 1. **CMake命令**:CMake提供了一系列的命令,如`...
这个压缩包包含了三本书籍资源,分别是“cmake教程”、“cmake实践”以及“跟我一起写Makefile”,它们都是帮助学习和理解CMake的强大工具。 在"cmake教程"中,你可以学习到CMake的基础知识,包括如何安装CMake、...
cmake学习手册集合包括《cmake教程》《cmake开发手册详解》《cmake中文手册》
### CMake教程:简明使用指南 #### 一、引言 CMake 是一个流行的开源构建系统生成器,被广泛应用于跨平台软件开发项目中。它通过读取一系列的脚本文件(通常命名为 `CMakeLists.txt`)来生成特定于操作系统的构建...
在“cmake教程代码示例”中,我们可以期待找到一系列展示 CMake 使用方法的代码片段和项目结构。这些示例通常包括如何设置项目的基本信息,如何添加源文件,如何指定目标(如执行文件或库),以及如何链接依赖的库。...
cmake教程查找并包含第三方库 如果你的项目依赖于第三方库,并且这些库不是系统默认的,你可以使用find_package和find_library命令来查找它们。 CMakeLists.txt (使用FindBoost.cmake模块来查找Boost库) cmake ...
linux下面cmake教程hello-cmake.md linux下面cmake教程hello-cmake.md linux下面cmake教程hello-cmake.md linux下面cmake教程hello-cmake.md linux下面cmake教程hello-cmake.md linux下面cmake教程hello-cmake.md ...
CMake入门教程 CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。它能够输出各种各样的makefile或者project文件,能测试编译器所支持的C++特性,类似UNIX下的automake。...
【cmake教程详细的学习教程】 cmake是一款强大的跨平台构建工具,主要负责管理和构建软件项目的编译过程。自2001年诞生以来,cmake因其简单易学、灵活多变的特点,逐渐受到广大开发者的青睐,特别是在KDE4项目采用...