CMake用法导览

合集下载

cmake使用手册

cmake使用手册

CMake是一个跨平台的开源构建系统,用于管理项目的构建过程。

以下是CMake的一般使用手册的大纲。

请注意,这里提供的是一般性的信息,具体的用法可能根据项目的需要而有所不同。

1. 安装CMake:-下载并安装适用于你操作系统的CMake 版本。

2. CMakeLists.txt 文件:-创建项目根目录下的CMakeLists.txt 文件。

-指定项目的名称、最低CMake 版本等基本信息。

3. 添加源文件和头文件:-使用add_executable 或add_library 命令添加源文件。

-使用include_directories 添加头文件目录。

# CMakeLists.txt 示例cmake_minimum_required(VERSION 3.10)project(MyProject)# 添加可执行文件add_executable(my_executable main.cpp)# 添加头文件目录include_directories(include)4. 添加依赖库:-使用target_link_libraries 命令添加依赖库。

# 添加依赖库target_link_libraries(my_executable my_library)5. 配置编译选项:-使用set 命令设置编译选项。

-使用add_compile_options 设置编译选项。

# 配置编译选项set(CMAKE_CXX_STANDARD 11)# 或者add_compile_options(-Wall -Wextra)6. 生成Makefile 或其他构建文件:-在项目根目录下执行cmake . 命令生成构建文件。

# 在项目根目录下执行cmake .7. 构建项目:-使用生成的构建文件(如Makefile)执行构建命令。

# 使用Makefile 构建make8. 安装和测试:-使用install命令指定安装目标。

-使用enable_testing启用测试,并使用add_test 添加测试。

cmake使用示例与整理总结

cmake使用示例与整理总结

cmake使用示例与整理总结一、概述CMake是一种跨平台的开源构建系统,它可以自动生成各种不同平台的构建文件,如Makefile或Visual Studio项目文件。

使用CMake 可以简化项目的构建过程,提高开发效率。

本文将介绍CMake的基本使用方法以及实际应用示例,并对常见问题进行总结。

二、安装与配置1. 下载安装CMake:从官网下载对应操作系统的安装包,安装完成后在命令行输入“cmake --version”确认是否安装成功。

2. 配置环境变量:将CMake的bin目录添加到PATH环境变量中。

三、基本使用方法1. 编写CMakeLists.txt文件:该文件描述了项目的结构和依赖关系,以及如何生成可执行文件或库。

2. 创建build目录:在项目根目录下创建一个build目录,并进入该目录。

3. 运行cmake命令:在build目录下运行“cmake ..”命令,表示将上级目录(即项目根目录)作为源代码路径,并生成相应的构建文件。

4. 构建项目:运行“make”或“cmake --build .”命令进行项目构建。

如果是Windows系统,则可以使用Visual Studio打开生成的.sln文件进行编译。

四、实际应用示例以下是一个简单的示例程序:```#include <stdio.h>int main(){printf("Hello, CMake!\n");return 0;}```该程序可以通过以下CMakeLists.txt文件进行构建:```cmake_minimum_required(VERSION 3.10)project(hello_cmake)add_executable(hello_cmake main.c)```在项目根目录下创建一个build目录,并进入该目录,运行“cmake ..”命令生成构建文件。

然后运行“make”或“cmake --build .”命令进行项目构建。

路径管理工具CMake的使用指南

路径管理工具CMake的使用指南

路径管理工具CMake的使用指南1.简介 CMake是一个开源的跨平台的路径管理工具,它采用一种类似于脚本的方式来管理项目的构建过程。

CMake提供了一套简单而强大的语法,可以帮助开发人员轻松地管理源码、依赖库和构建目录,从而实现跨平台的项目构建。

本文将介绍CMake的基本用法和一些常用功能,帮助大家更好地使用这个工具。

2.安装和配置我们需要下载并安装CMake。

可以从官方网站下载适合自己操作系统的安装包,并按照安装向导进行安装。

安装完成后,添加CMake到系统的环境变量中,以便在命令行中可以直接使用CMake命令。

3.CMakeLists.txt文件 CMake使用CMakeLists.txt文件来描述项目的构建规则。

在项目的根目录下创建一个CMakeLists.txt文件,并按照以下结构填写内容:cmake_minimum_required(VERSION 3.10)project(MyProject)# 添加源文件add_executable(MyApp main.cpp)# 添加依赖库target_link_libraries(MyApp lib1 lib2)# 设置编译选项set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")在CMakeLists.txt文件中,我们可以设置项目的最低CMake版本,指定项目的名称,添加源文件和依赖库,设置编译选项等。

可以根据项目的实际需求来修改和扩展CMakeLists.txt文件中的内容。

4.生成项目在项目的根目录下打开命令行窗口,执行以下命令来生成项目的构建文件:cmake .这会在当前目录下生成一个用于构建项目的Makefile文件(或者是其他构建系统所需的文件),构建过程中的中间文件和目标文件将会放在一个名为build的文件夹中。

5.编译项目执行以下命令来编译项目:make这会根据之前生成的Makefile文件来进行项目的编译。

cmake工程的linux编译命令_概述及解释说明

cmake工程的linux编译命令_概述及解释说明

cmake工程的linux编译命令概述及解释说明引言部分是文章的开篇,通常会包括概述、文章结构和目的三个方面。

在这篇关于cmake工程的Linux编译命令文章中,引言部分需要首先简要介绍cmake 在Linux编译中的作用,并说明本文将通过各个章节对cmake工程进行详细解析和指导。

接着,描述文章的结构安排,包括大纲中各个章节内容的概述和重点。

最后,明确阐述写作本文的目的和意义,可能包括提高读者对cmake工程编译命令的理解和应用能力,为Linux开发者提供实用指导等。

整体来说,引言部分要能够清晰明了地表达出本文所要讨论内容的重点和意义。

2. cmake工程概述:2.1 什么是cmake工程cmake工程是指使用CMake构建系统管理的项目。

CMake是一个跨平台的构建系统生成工具,可以自动生成用于多种编译环境(如Unix Makefiles、Visual Studio等)的构建文件,使得项目能够轻松在不同平台上进行编译和构建。

通过定义项目结构和依赖关系,CMake可以帮助开发人员更方便地配置和生成可执行文件或库。

2.2 cmake与makefile的关系CMake与传统的makefile相比具有更高的抽象层次和更强大的功能性。

传统makefile语法相对复杂,而且在不同平台上可能存在兼容性问题。

而CMake提供了简单易用的语法和命令,能够自动生成适用于各种编译器和操作系统的makefile文件。

开发人员只需编写简单的CMakeLists.txt文件来描述项目结构和依赖关系,就可以快速生成适用于目标平台的构建文件。

2.3 cmake在Linux编译中的作用在Linux系统中,使用cmake可以更加方便地管理复杂项目的编译过程。

通过定义项目源码目录、包含文件路径、库文件路径等信息,并指定需要使用的编译器及其参数,在执行cmake命令后即可自动生成相应平台下所需的makefile 或IDE工程文件,然后使用make或其他对应工具进行编译链接即可得到目标执行文件或库。

cmake手册

cmake手册

cmake手册概述CMake是一个开源的、跨平台的构建工具。

它使用简单的配置文件和命令来生成建构系统文件(如makefile或Visual Studio解决方案),从而实现自动化构建过程。

本文将详细介绍CMake的基本使用方法和常见功能。

安装要使用CMake,首先需要将其安装在计算机上。

以下是安装CMake的一般步骤:1.在CMake的官方网站上下载适合您操作系统的安装包。

2.运行安装包,按照提示完成安装过程。

3.验证CMake是否成功安装,可以在终端(Linux或macOS)或命令提示符(Windows)中运行cmake --version命令,如果输出了CMake的版本信息,则表示安装成功。

CMakeLists.txt文件CMake使用CMakeLists.txt文件来定义项目的构建规则。

每个项目都需要一个CMakeLists.txt文件,其中包含了项目所需的信息和配置。

以下是一个简单的CMakeLists.txt文件示例:cmake_minimum_required(VERSION 3.12) # 指定CMake的最低版本要求project(MyProject) # 定义项目名称add_executable(MyExecutable main.cpp) # 添加一个可执行文件target_link_libraries(MyExecutable MyLibrary) # 链接一个库文件基本命令CMake提供了一系列命令来定义项目的构建规则。

以下是一些常用的CMake命令:add_executableadd_executable命令用于添加一个可执行文件到项目中。

它接受一个参数,即可执行文件的名称及相关的源文件。

add_executable(MyExecutable main.cpp) # 添加一个可执行文件MyExecutable,包括main.cpp源文件add_libraryadd_library命令用于添加一个库文件到项目中。

Cmake使用手册

Cmake使用手册
简单例子:MAIN.C
我们以一个简单例子开始,逐步解析cmake的完整构建过 程
创建t1目录,在此目录下建立main.c main.c文件内容: //main.c #include <stdio.h> int main() {
printf(“Hello World from t1 Main!\n”); return 0; }
构建多目录工程
在tmp目录下创建文件CMakeLists.txt,内容如下: PROJECT (TMP)
ADD_DEFINITIONS(-DPOSIX)
AUX_SOURCE_DIRECTORY(source/a DIR_SRC_A) AUX_SOURCE_DIRECTORY(source/b DIR_SRC_B)
存储
动态库构建
以前面多目录工程tmp为例,只要将CMakeLists.txt改为如下 即可:
PROJECT (TMP) ADD_DEFINITIONS(-DPOSIX) ADD_DEFINITIONS(-DDEBUG)
AUX_SOURCE_DIRECTORY(source/a DIR_SRC_A) AUX_SOURCE_DIRECTORY(source/b DIR_SRC_B) SET(TMP_SRCS
printf("this is func_创建目录b,在b目录下创建文件 bfile.c:
内容如下 #include "../../include/tmp.h" #include <stdio.h> void func_b() { printf("this is func_b\n"); }
简单例子: CMAKELISTS.TXT

CMake词法和语法

CMake词法和语法

词法和语法在开始本节的学习之前,我们先总结一下之前所了解到的CMake基本词法和命令。

CMake命令通常使用如下的格式:1. COMMAND( ARG1 ARG2 … )复制代码命令关键字之后使用括号来包含所有的参数;各个参数之间使用空格或者换行符分隔;而参数通常有以下几种形式:变量,以${MY_VAIRABLE}的形式表达,其储存类型为字符串类型,但是可以根据具体命令的要求自动转换为布尔型、整型或者浮点类型。

变量可以出现在字符串中,也可以实现“内省”。

变量有用户自定义和系统内置两种,用户自定义变量使用SET命令设置;而系统变量由系统自动赋值,例如${PROJECT_SOURCE_DIR}。

枚举量,例如ADD_LIBRARY可以设置要生成的链接库为SHARED或者STATIC,还可以设置为MODULE(插件,可动态调用,但不作为其他工程的依赖),除此之外的赋值都是不能被识别的。

值,也就是任意的字符串内容,它可以用来指示要编译的源代码文件名,也可以表达一段文字提示信息,或者表达特定的功能。

值可以使用引号进行标识,多数情况下也可以不用。

前文中我们已经了解到的命令列举如下,此外这里还简要地介绍了另一些可能在各类CMake 工程中遇到的命令及其语法格式。

CMake部分命令的语法歌是十分复杂,这里仅仅介绍它的某一种实现形式,建议读者阅读CMake的帮助文档以获取更多信息。

括号中为该命令的一个或多个参数项,其中使用“[…]”包含的项表示可忽略项,使用“…|…”分隔的项表示只能选择其中一项。

ADD_CUSTOM_COMMAND(TARGET namePRE_BUILD|PRE_LINK|POST_BUILDCOMMAND cmd1 [COMMAND cmd2 …] ):为目标工程name添加一个或多个新的自定义的编译规则cmd1,cmd2等,执行时机可以选择编译前,链接前或者编译后。

它的作用相当于Visual Studio工程的“Custom Build Step”属性。

CMake用法详解

CMake用法详解

CMake 相关一.第一次尝试结果:我将源码目录建为src,编译目录建为build.然后在src下建立main,用于放main相关的文件,再在src下建立lib1,用于放一个小库。

Magic Happens like this:(1)main和lib1中的CMakeLists.txt,只需要写上和Build Target相关的command。

这里是ADD_LIBRARY()或ADD_EXECUTABLE(),另外因为main要链接lib1库,所以要添加Build Flags(Options)相关的:TARGET_LINK_LIBRARIES()。

(2)然后在main和lib1的同级目录,即src下,建立工程的总的CMakeLists.txt。

这里面就放SUBDIRS()以及和Build Flags(Options)相关的就好。

Build Flags(Options)可用INCLUDE_DIRECTORIES()来将lib1写入,这样,main中的程序要用lib1库,就只需要写"lib.h"就好,而不需要给出路径。

然后,不用写LINK_DIRECTORIES(),可能有些版本要写。

但我这个版本,不用给出工程中生成的库的路径,就可以链接。

还有一个Magic是,只需要一遍cmake,之后如果源文件或CMakeLists.txt做了更改,都不必要cmake,直接make,它会看情况rerun cmake.我习惯于:公共的东西,放在top的CMakeLists.txt里,各个库和执行文件相关的放在各个目录的CMakeLists.txt里,比如各个库怎么装。

top的CMakeLists.txt的例子:PROJECT(helloworld)SUBDIRS(main lib1 lib2)#设置工程需要的头文件路径(包括工程内的)INCLUDE_DIRECTORIES(./lib1 ./lib2 ${CMAKE_BINARY_DIR}/config)#设置用户选项OPTION(HELLO1 "Using Lib1" ON)#将config.h.in转为config.hCONFIGURE_FILE(${CMAKE_SOURCE_DIR}/config/config.h.in${CMAKE_BINARY_DIR}/config/config.h)#设置工程变量SET(CMAKE_INSTALL_PREFIX /home/evan/local)二. 小结:1、基本命令:- Build Targets:SET()SUBDIRS()ADD_LIBRARY()ADD_EXECUTABLE()PROJECT()- Build Flags and Options:INCLUDE_DIRECTORIES()LINK_DIRECTORIES()TARGET_LINK_LIBRARIES()- Flow Control ConstructsIF的例子:IF(UNIX)IF(APPLE)SET(GUI "Cocoa"ELSE(APPLE)SET(GUI "X11"ENDIF(APPLE)ELSE(UNIX)IF(WIN32)SET(GUI "Win32"ELSE(WIN32)SET(GUI "Unknown"ENDIF(WIN32)ENDIF(UNIX)MESSAGE的例子:MESSAGE("GUI system is ${GUI}")FOREACH例子:就是可以简化对多个命令的调用,相当于bash的for语句。

cmake使用示例与整理总结

cmake使用示例与整理总结

cmake使用示例与整理总结cmake中一些预定义变量∙PROJECT_SOURCE_DIR 工程的根目录∙PROJECT_BINARY_DIR 运行cmake命令的目录,通常是${PROJECT_SOURCE_DIR}/build∙CMAKE_INCLUDE_PATH 环境变量,非cmake变量∙CMAKE_LIBRARY_PATH 环境变量∙CMAKE_CURRENT_SOURCE_DIR 当前处理的CMakeLists.txt所在的路径∙CMAKE_CURRENT_BINARY_DIR target编译目录使用ADD_SURDIRECTORY(src bin)可以更改此变量的值SET(EXECUTABLE_OUTPUT_PATH <新路径>)并不会对此变量有影响,只是改变了最终目标文件的存储路径∙CMAKE_CURRENT_LIST_FILE 输出调用这个变量的CMakeLists.txt的完整路径∙CMAKE_CURRENT_LIST_LINE 输出这个变量所在的行∙CMAKE_MODULE_PATH 定义自己的cmake模块所在的路径SET(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake),然后可以用INCLUDE命令来调用自己的模块∙EXECUTABLE_OUTPUT_PATH 重新定义目标二进制可执行文件的存放位置∙LIBRARY_OUTPUT_PATH 重新定义目标链接库文件的存放位置∙PROJECT_NAME 返回通过PROJECT指令定义的项目名称∙CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS 用来控制IF ELSE语句的书写方式系统信息∙CMAKE_MAJOR_VERSION cmake主版本号,如2.8.6中的2∙CMAKE_MINOR_VERSION cmake次版本号,如2.8.6中的8∙CMAKE_PATCH_VERSION cmake补丁等级,如2.8.6中的6∙CMAKE_SYSTEM 系统名称,例如Linux-2.6.22∙CAMKE_SYSTEM_NAME 不包含版本的系统名,如Linux∙CMAKE_SYSTEM_VERSION 系统版本,如2.6.22∙CMAKE_SYSTEM_PROCESSOR 处理器名称,如i686∙UNIX 在所有的类UNIX平台为TRUE,包括OS X和cygwin∙WIN32 在所有的win32平台为TRUE,包括cygwin开关选项∙BUILD_SHARED_LIBS 控制默认的库编译方式。

Cmake使用教程

Cmake使用教程

Cmake使⽤教程Cmake 使⽤教程CMake是⼀个⽐make更⾼级的编译配置⼯具。

它可以根据不同平台、不同的编译器,⽣成相应的 Makefile 或者 vcproj 项⽬。

通过编写CMakeLists.txt,可以控制⽣成的 Makefile,从⽽控制编译过程。

CMake ⾃动⽣成的 Makefile 不仅可以通过 make 命令构建项⽬,⽣成⽬标⽂件,还⽀持:1. 安装(make install)、2. 测试安装的程序是否能正确执⾏(make test,或者ctest)、3. ⽣成当前平台的安装包(make package)、4. ⽣成源码包(make package_source)、5. 产⽣ Dashboard 显⽰数据并上传等⾼级功能,6. 只要在CMakeLists.txt中简单配置,就可以完成很多复杂的功能,包括写测试⽤例。

7. 如果有嵌套⽬录,⼦⽬录下可以有⾃⼰的 CMakeLists.txt。

总之,CMake是⼀个⾮常强⼤的编译⾃动配置⼯具,⽀持各种平台,KDE 也是⽤它编译的,感兴趣的可以试⽤⼀下。

// ----------------------------------------------------------------------------------//-----------------------------------------------------------------------------------我们需在 CMakeLists.txt ⽂件中指定如下⼏项,cmake版本、⼯程名、构建⽬标app的源⽂件(1)cmake 版本: cmake_minimum_required(VERSION 3.11)(2)指定⼯程名:project(My_project_Yuejie)(3)指定安装⽬录:set(CMAKE_INSTALL_PREFIX "/usr/local/yzhang")(4)设置 C++ standard :set(CMAKE_CXX_STANDARD 11);set(CMAKE_CXX_STANDARD_REQUIRED ON)(5)add_subdirectories :添加外部项⽬⽂件夹(6)include_directories :将指定⽬录添加到编译器的头⽂件搜索路径之下(7)“是指定义了顶级 CMakeLists.txt 的⽂件夹(8)“cmake_c_flags” “cmake_cxx_flags”:⽤来设置编译选项-Wall : ??-Wextra: ??-ggdb: ??-Wno-missing-field_initializers : ??(9) list :(1)LENGTH 返回list的长度(2)GET 返回list中index的element到value中(3)APPEND 添加新element到list中(3)FIND 返回list中element的index,没有找到返回-1(4)INSERT 将新element插⼊到list中index的位置(5)REMOVE_ITEM 从list中删除某个element(6)REMOVE_AT 从list中删除指定index的element(7)REMOVE_DUPLICATES 从list中删除重复的element(8)REVERSE 将list的内容反转(9)SORT 将list按字母顺序排序(10)option :添加编译选项。

cmake常用命令用法

cmake常用命令用法

cmake常用命令用法以下是 7 条关于“cmake 常用命令用法”的内容:1. cmake --help 这个命令就像是你在陌生地方找地图一样重要!比如说,当你一头雾水不知道 cmake 有哪些功能的时候,用它一下,哇塞,各种信息就出来啦,就像突然有了指明灯呀!2. cmake -B build-dir,这就好像给你的项目搭建一个专属的工作室呀!你看,你指定一个目录来存放构建相关的东西,多方便呀!就好比你给你的宝贝项目找了个特别的房间来安置它。

比如你要在一个叫“myproject”的文件夹里建,那就 cmake -B myproject/build-dir 呗!3. cmake --install dir,哎呀呀,这个命令就像是把辛苦做好的成果好好地摆放起来一样呢!当你的项目构建完成,用这个命令就可以把生成的东西安装到指定的目录里啦。

好比你把做好的蛋糕小心翼翼地放到漂亮盘子里一样。

比如说你想装到“installation”目录,那就是 cmake --install installation 呀!4. cmake -G "Generator Name",哇哦,这个就像是给你的项目选一个最合适的施工队呀!不同的生成器有不同的特点呢,根据你的需求选对了,那项目推进就顺顺当当啦!比如你想用 Visual Studio 的生成器,那就是cmake -G "Visual Studio 16 2019" 呀!5. cmake -DCMAKE_BUILD_TYPE=Release,嘿呀,这就好比你给项目设定一个工作模式呀!是轻松慢悠悠的还是紧张高效的呢?选了 Release 就像是开启了加速模式呢!比如说你就想让项目高效奔跑起来,那就用这个命令啦!6. cmake -DCMAKE_CXX_FLAGS="-std=c++11",哇,这个像不像给你的项目工具加上特别的功能呀!你可以通过这个来设定一些编译的选项呢。

cmake用法

cmake用法

cmake用法
CMake是一个跨平台的、自动生成Makefile的工具。

它的主要功能是根据CMakeLists.txt文件自动生成项目所需要的Makefile文件,并能够在不同的编译环境中实现相同的编译配置和生成过程。

CMake的使用一般包含以下步骤:
1. 创建一个项目目录作为根目录,其中包含CMakeList.txt文
件和源代码等文件。

2. 在CMakeList.txt中指定项目名称、版本号等基本信息。

3. 使用CMake提供的各种命令设置项目的编译选项、源代码目录、库文件目录等,例如:add_executable、add_library、
target_link_libraries等。

4. 运行cmake命令生成Makefile文件,例如:
```
cmake .
```
5. 在指定的目标平台上执行make命令进行编译,例如:
```
make
```
通过这样的流程,我们可以很轻松地实现跨平台的项目编译。


果需要在其他平台上编译,只需要在新平台上重新执行步骤4和步骤5即可。

总的来说,CMake是一个非常强大的跨平台自动生成Makefile的工具,它的使用可以避免手动编写复杂的Makefile文件,大大简化了
项目的编译过程。

cmake使用方法详解(转载)

cmake使用方法详解(转载)

cmake使⽤⽅法详解(转载)cmake 简介CMake是⼀个跨平台的安装(编译)⼯具,可以⽤简单的语句来描述所有平台的安装(编译过程)。

他能够输出各种各样的makefile或者project ⽂件,能编译器所⽀持的C++特性,类似UNIX下的automake。

CMake 使⽤⽅法CMake的所有的语句都写在⼀个叫:CMakeLists.txt的⽂件中。

当CMakeLists.txt⽂件确定后,可以⽤ccmake命令对相关的变量值进⾏配置。

这个命令必须指向CMakeLists.txt所在的⽬录。

配置完成之后,应⽤cmake命令⽣成相应的makefile(在Unix like系统下)或者 project⽂件(指定⽤window下的相应编程⼯具编译时)。

其基本操作流程为:1. $> ccmake directory2. $> cmake directory3. $> make其中directory为CMakeList.txt所在⽬录;第⼀条语句⽤于配置编译选项,如VTK_DIR⽬录,⼀般这⼀步不需要配置,直接执⾏第⼆条语句即可,但当出现错误时,这⾥就需要认为配置了,这⼀步才真正派上⽤场;第⼆条命令⽤于根据CMakeLists.txt⽣成Makefile⽂件;第三条命令⽤于执⾏Makefile⽂件,编译程序,⽣成可执⾏⽂件;CMake的执⾏就是这么简单,其难点在于如何编写CMakeLists.txt⽂件,下⾯结合例⼦简单介绍CMakeLists.txt的编写,看下⾯这个CMakeLists.txt1. #project name2. PROJECT(test_math)3. #head file path4. INCLUDE_DIRECTORIES(5. include6. )7. #source directory8. AUX_SOURCE_DIRECTORY(src DIR_SRCS)9. #set environment variable10. SET(TEST_MATH11. ${DIR_SRCS}12. )13. #set extern libraries14. SET(LIBRARIES15. libm.so16. )17. #add executable file18. ADD_EXECUTABLE(../bin/bin ${TEST_MATH})19. #add link library20. TARGET_LINK_LIBRARIES(../bin/bin ${LIBRARIES})21.或者⽤下⾯这个CMakeLists.txt[cpp]1. #project name2. PROJECT(test_math)3.4. add_definitions("-Wall -lpthread -g")5.6. #head file path7. INCLUDE_DIRECTORIES(8. include9. )10.11. #source directory12. AUX_SOURCE_DIRECTORY(src DIR_SRCS)13.14. #set environment variable15. SET(TEST_MATH16. ${DIR_SRCS}17. )18.19. #set extern libraries20. SET(LIBRARIES21. libm.so22. )23.24. # set output binary path25. SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)26.27. SET(FS_BUILD_BINARY_PREFIX "Yfs")28.29. #add executable file30. ADD_EXECUTABLE(${FS_BUILD_BINARY_PREFIX}sqrt ${TEST_MATH})31.32. #add link library33. TARGET_LINK_LIBRARIES(${FS_BUILD_BINARY_PREFIX}sqrt ${LIBRARIES})这是⼀个测试数学函数的程序的CMakeLists.txt,"#"后⾯为注释的内容,CMake的命令全部为⼤写第2⾏指定⽣成的⼯程名为test_math第4⾏指定头⽂件⽬录为include第8⾏指定源⽂件⽬录为src,并将其赋值给环境变量DIR_SRCS第10⾏设定环境变量TEST_MATH的值为环境变量DIR_SRCS的值,此处⽤于显⽰如何⽤环境变量对环境变量进⾏赋值第14⾏将数学函数库赋值给环境变量LIBRARIES,当然,可以不⽤这个环境变量,⽽在后⾯直接使⽤该库名第18⾏⽤于指定⽣成⽂件,将环境变量TEST_MATH⽬录下的所有⽂件编译⽣成../bin⽬录下的可执⾏⽂件bin第20⾏指定../bin/bin执⾏时的链接库为环境变量LIBRARIES的值-libm.so下⾯给出源⽂件/src/main.c:1. #include<stdio.h>2. #include"../include/a.h"3. int main()4. {5. double b=25.0;6. double a=0.0;7. a=get_sqrt(b);8.9. ("a is %lf, b is %lf\n",a,b);10. return 0;11. }12./src/a.c1. #include"../include/a.h"2. double get_sqrt(double var1)3. {4. return sqrt(var1);5. }6./include/a.h#ifndef A_FILE_HEADER_INC1.2. #define A_FILE_HEADER_INC3. #include<math.h>4.5. double get_sqrt(double var1);6.7. #endif将CMakeLists.txt放在当前⽬录下,执⾏CMakeLists.txt1. $> cmake .2. $> make即可⽣成可执⾏⽂件,在⽬录/bin下的bin⽂件,好了运⾏看其效果是否和所想⼀样。

CMAKE的使用

CMAKE的使用

CMAKE的使用一、基本使用安装:下载二进制包后可直接解压使用从源码安装则执行命令:./bootstrap; make; make install——尝试执行bootstrap失败使用:cmake dir_path,生成工程文件或makefile文件二、概念out-of-source build,与in-source build相对,即将编译输出文件与源文件放到不同目录中;三、基本结构1,依赖CMakeLists.txt文件,项目主目标一个,主目录中可指定包含的子目录;2,在项目CMakeLists.txt中使用project指定项目名称,add_subdirectory添加子目录3,子目录CMakeLists.txt将从父目录CMakeLists.txt继承设置(TBD,待检验)四、语法1. #注释2. 变量:使用set命令显式定义及赋值,在非if语句中,使用${}引用,if中直接使用变量名引用;后续的set命令会清理变量原来的值;3. command (args ...) #命令不分大小写,参数使用空格分隔,使用双引号引起参数中空格4. set(var a;b;c) <=> set(var a b c) #定义变量var并赋值为a;b;c这样一个string list5. Add_executable(${var}) <=> Add_executable(a b c) #变量使用${xxx}引用6. 条件语句:if(var) #var 非empty 0 N No OFF FALSE... #非运算使用NOT…else()/elseif() … endif(var)7. 循环语句Set(VAR a b c)Foreach(f ${VAR}) …Endforeach(f)8. 循环语句WHILE() … ENDWHILE()五、内部变量CMAKE_C_COMPILER:指定C编译器CMAKE_CXX_COMPILER:CMAKE_C_FLAGS:编译C文件时的选项,如-g;也可以通过add_definitions添加编译选项EXECUTABLE_OUTPUT_PATH:可执行文件的存放路径LIBRARY_OUTPUT_PATH:库文件路径CMAKE_BUILD_TYPE::build 类型(Debug, Release, ...),CMAKE_BUILD_TYPE=DebugBUILD_SHARED_LIBS:Switch between shared and static libraries内置变量的使用:>> 在CMakeLists.txt中指定,使用set>> cmake命令中使用,如cmake -DBUILD_SHARED_LIBS=OFF六、命令project (HELLO) #指定项目名称,生成的VC项目的名称;>>使用${HELLO_SOURCE_DIR}表示项目根目录include_directories:指定头文件的搜索路径,相当于指定gcc 的-I参数>> include_directories (${HELLO_SOURCE_DIR}/Hello) #增加Hello为include目录link_directories:动态链接库或静态链接库的搜索路径,相当于gcc的-L参数>> link_directories (${HELLO_BINARY_DIR}/Hello) #增加Hello为link目录add_subdirectory:包含子目录>> add_subdirectory (Hello)add_executable:编译可执行程序,指定编译,好像也可以添加.o文件>> add_executable (helloDemo demo.cxx demo_b.cxx) #将cxx编译成可执行文件——add_definitions:添加编译参数>> add_definitions(-DDEBUG)将在gcc命令行添加DEBUG宏定义;>> add_definitions( “-Wall -ansi –pedantic –g”)target_link_libraries:添加链接库,相同于指定-l参数>> target_link_libraries(demo Hello) #将可执行文件与Hello连接成最终文件demoadd_library:>> add_library(Hello hello.cxx) #将hello.cxx编译成静态库如libHello.aadd_custom_target:message( status|fatal_error, “message”):set_target_properties( ... ): lots of properties... OUTPUT_NAME, VERSION, ....link_libraries( lib1 lib2 ...): All targets link with the same set of libs七、说明1,CMAKE生成的makefile能够处理好.h文件更改时只编译需要的cpp文件;八、FAQ1)怎样获得一个目录下的所有源文件>> aux_source_directory(<dir> <variable>)>> 将dir中所有源文件(不包括头文件)保存到变量variable中,然后可以add_executable (ss7gw ${variable})这样使用。

CMake使用总结(一)

CMake使用总结(一)

CMake使⽤总结(⼀)当我们在写CMakeLists.txt⽂件时,常常会搞不明⽩link_directories, LINK_LIBRARIES, target_link_libraries这3者的区别,下⾯就其详细介绍:INCLUDE_DIRECTORIES(添加头⽂件⽬录)它相当于g++选项中的-I参数的作⽤,也相当于环境变量中增加路径到CPLUS_INCLUDE_PATH变量的作⽤(这⾥特指c++。

c和中⽤法类似)。

⽐如:include_directories("/opt/MATLAB/R2012a/extern/include")LINK_DIRECTORIES(添加需要链接的库⽂件⽬录)语法:link_directories(directory1 directory2 ...)它相当于g++命令的-L选项的作⽤,也相当于环境变量中增加LD_LIBRARY_PATH的路径的作⽤。

⽐如:LINK_DIRECTORIES("/opt/MATLAB/R2012a/bin/glnxa64")LINK_LIBRARIES (添加需要链接的库⽂件路径,注意这⾥是全路径)List of direct link dependencies.⽐如:LINK_LIBRARIES("/opt/MATLAB/R2012a/bin/glnxa64/libeng.so")LINK_LIBRARIES("/opt/MATLAB/R2012a/bin/glnxa64/libmx.so")也可以写成:LINK_LIBRARIES("/opt/MATLAB/R2012a/bin/glnxa64/libeng.so" "/opt/MATLAB/R2012a/bin/glnxa64/libmx.so") TARGET_LINK_LIBRARIES (设置要链接的库⽂件的名称)语法:TARGET_LINK_LIBRARIES(targetlibrary1 <debug | optimized> library2 ..)⽐如(以下写法(包括备注中的)都可以):TARGET_LINK_LIBRARIES(myProject hello),连接libhello.so库TARGET_LINK_LIBRARIES(myProject libhello.a)TARGET_LINK_LIBRARIES(myProject libhello.so)再如:TARGET_LINK_LIBRARIES(myProject #这些库名写法都可以。

CMake使用教程

CMake使用教程

CMake使⽤教程CMake是⼀个⽐make更⾼级的编译配置⼯具,它可以根据不同平台、不同的编译器,⽣成相应的Makefile或者vcproj项⽬。

通过编写CMakeLists.txt,可以控制⽣成的Makefile,从⽽控制编译过程。

CMake⾃动⽣成的Makefile不仅可以通过make命令构建项⽬⽣成⽬标⽂件,还⽀持安装(make install)、测试安装的程序是否能正确执⾏(make test,或者ctest)、⽣成当前平台的安装包(make package)、⽣成源码包(make package_source)、产⽣Dashboard显⽰数据并上传等⾼级功能,只要在CMakeLists.txt中简单配置,就可以完成很多复杂的功能,包括写测试⽤例。

如果有嵌套⽬录,⼦⽬录下可以有⾃⼰的CMakeLists.txt。

总之,CMake是⼀个⾮常强⼤的编译⾃动配置⼯具,⽀持各种平台,KDE也是⽤它编译的,感兴趣的可以试⽤⼀下。

准备活动:(1)安装cmake。

下载地址:根据⾃⼰的需要下载相应的包即可,Windows下可以下载zip压缩的绿⾊版本,还可以下载源代码。

(2)运⾏cmake的⽅法。

(GUI、命令⾏)CMake使⽤步骤:运⾏GUI的cmake界⾯:cmake-2.8.1-win32-x86/bin/cmake-gui.exe执⾏Configure:运⾏之后,⽣成了如下⽂件:⽣成Makefile:执⾏Generate之后⽣成如下⽂件:运⾏make进⾏编译:编译完成后,在build⽬录⽣成Tutorial.exe,运⾏Tutorial.exe 25就可以看到运⾏结果:运⾏make install安装程序:运⾏make test进⾏测试:通过cmake tutorial学习CMake配置⽅法可以在源代码的Tests/Turorial⽬录中找到这个⼿册对应的代码。

1、Step1。

(如果不知道如何使⽤cmake,以及如何使⽤编译产⽣的Turorial.exe,可先看下前⾯“CMake使⽤步骤”的说明,它以Step4为例详细介绍了使⽤过程,Step1的配置可能不够完全,⽐如⽆法运⾏make install,⽆法运⾏make test,但可以参考。

CMake用法导览

CMake用法导览

CMake⽤法导览本⽂下述内容是⼀个⼿把⼿的使⽤指南;它涵盖了CMake需要解决的公共构建系统的⼀些问题。

这些主题中的许多主题已经在Mastering CMake⼀书中以单独的章节被介绍过,但是通过⼀个样例⼯程看⼀看它们如何⼯作也是⾮常有帮助的。

本指南可以在CMake源码树的Tests/Tutorial路径下找到。

每⼀步都有它⾃⼰的⼦路径,其中包含该步骤的⼀个完整的指南。

作为基础的起始点(步骤1) 最基本的⼯程是⼀个从源代码⽂件中构建可执⾏⽂件的例⼦。

对于简单⼯程,只要⼀个两⾏的CMakeLists⽂件就⾜够了。

这将会作为我们指南的起点。

这份CMakeLists⽂件看起来像是这样:cmake_minimum_required (VERSION 2.6)project (Tutorial)add_executable(Tutorial tutorial.cxx) 注意到这个例⼦在CMakeLists⽂件中使⽤了⼩写。

CMake⽀持⼤写、⼩写、混合⼤⼩写的命令。

tutorial.cxx中的源代码⽤来计算⼀个数的平⽅根,并且它的第⼀版⾮常简单,如下所⽰:// A simple program that computes the square root of a number// 计算⼀个数的平⽅根的简单程序#include <stdio.h>#include <stdlib.h>#include <math.h>int main (int argc, char *argv[]){if (argc < 2){fprintf(stdout,"Usage: %s number\n",argv[0]);return 1;}double inputValue = atof(argv[1]);double outputValue = sqrt(inputValue);fprintf(stdout,"The square root of %g is %g\n",inputValue, outputValue);return 0;}我们添加的第⼀个特性⽤来为⼯程和可执⾏⽂件指定⼀个版本号。

cmake 用例

cmake 用例

CMake是一个跨平台的自动化构建工具,它主要用于管理软件构建过程,支持包括Windows、Linux、macOS等在内的多种操作系统。

下面我们将详细介绍CMake的使用案例,包括定义、用法、重点、难点和注意事项等方面。

一、CMake定义和使用方法--------CMake是一个命令行工具,用于生成构建文件,如Makefile、Visual Studio项目文件等。

用户通过编写CMakeLists.txt文件来描述构建规则和依赖关系,然后使用CMake 命令生成构建文件。

使用CMake的一般步骤如下:1.创建一个包含CMakeLists.txt的源代码目录。

2.在CMakeLists.txt中定义项目信息和指定依赖库。

3.运行CMake命令,生成构建文件。

4.使用生成的构建文件编译和链接项目。

二、CMake使用案例1:简单的CMake项目------------假设我们有一个C++项目,包含两个源文件main.cpp和helper.cpp,我们希望使用CMake来管理这个项目的构建。

首先,我们需要在项目的根目录下创建一个名为CMakeLists.txt的文件,然后在该文件中添加以下内容:在这个例子中,我们使用了以下CMake命令:●CMake版本要求。

●●C++标准,这将用于编译C++源文件。

●三、CMake使用案例2:使用依赖库的CMake项目-假设我们的项目需要使用一个外部库libmath,该库已经在系统上安装并且具有include文件和库文件。

我们希望在CMakeLists.txt中添加对这个库的引用,以构建我们的项目。

首先,我们需要在CMakeLists.txt中添加以下内容:在这个例子中,我们使用了以下CMake命令:●设置头文件的搜索路径,这将告诉编译器在哪里查找头文件。

●四、CMake使用案例3:多配置的CMake项目-假设我们的项目需要在不同的平台上进行构建,每个平台使用不同的编译器和构建选项。

cmake的语法

cmake的语法

cmake的语法CMake是一种跨平台的构建工具,用于自动化构建和管理项目。

它的语法简洁易懂,可以帮助开发者更高效地管理项目的构建过程。

本文将介绍CMake的语法及其常用功能。

CMake的语法主要由命令、变量和注释组成。

命令是CMake的核心,用于执行各种构建任务。

变量用于存储和传递数据,可以是全局变量或局部变量。

注释用于解释代码的作用和用途,提高代码的可读性。

CMake的命令以CMakeLists.txt文件为基础,该文件位于项目的根目录下。

在CMakeLists.txt中,可以使用一系列命令来定义项目的属性、依赖关系和构建规则。

首先,我们需要使用`cmake_minimum_required`命令指定CMake的最低版本要求。

例如,`cmake_minimum_required(VERSION 3.10)`表示项目需要CMake 3.10或更高版本。

接下来,我们可以使用`project`命令定义项目的名称和版本。

例如,`project(MyProject VERSION 1.0)`表示项目名为"MyProject",版本号为1.0。

然后,我们可以使用`add_executable`命令定义可执行文件。

例如,`add_executable(myapp main.cpp)`表示将main.cpp文件编译为名为"myapp"的可执行文件。

除了可执行文件,我们还可以使用`add_library`命令定义静态库或动态库。

例如,`add_library(mylib STATIC lib.cpp)`表示将lib.cpp文件编译为名为"mylib"的静态库。

在定义了可执行文件或库之后,我们可以使用`target_link_libraries`命令指定依赖关系。

例如,`target_link_libraries(myapp mylib)`表示myapp可执行文件依赖于mylib库。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Cmake用法导览2013年1月20日星期日,15:39:00 | SirDigitPreface : 本文是CMake官方文档CMake Tutorial (/cmake/help/cmake_tutorial.html) 的翻译。

通过一个样例工程从简单到复杂的完善过程,文档介绍了CMake主要模块(cmake, ctest, cpack)的功能和使用环境;从中可以一窥cmake的大体形貌。

正文如下:本文下述内容是一个手把手的使用指南;它涵盖了CMake需要解决的公共构建系统的一些问题。

这些主题中的许多主题已经在Mastering CMake一书中以单独的章节被介绍过,但是通过一个样例工程看一看它们如何工作也是非常有帮助的。

本指南可以在CMake源码树的Tests/Tutorial路径下找到。

每一步都有它自己的子路径,其中包含该步骤的一个完整的指南。

作为基础的起始点(步骤1)最基本的工程是一个从源代码文件中构建可执行文件的例子。

对于简单工程,只要一个两行的CMakeLists文件就足够了。

这将会作为我们指南的起点。

这份CMakeLists文件看起来像是这样:cmake_minimum_required (VERSION 2.6)project (Tutorial)add_executable(Tutorial tutorial.cxx)注意到这个例子在CMakeLists文件中使用了小写。

CMake支持大写、小写、混合大小写的命令。

tutorial.cxx中的源代码用来计算一个数的平方根,并且它的第一版非常简单,如下所示:// A simple program that computes the square root of a number// 计算一个数的平方根的简单程序#include <stdio.h>#include <stdlib.h>#include <math.h>int main (int argc, char *argv[]){if (argc < 2){fprintf(stdout,"Usage: %s number\n",argv[0]);return 1;}double inputValue = atof(argv[1]);double outputValue = sqrt(inputValue);fprintf(stdout,"The square root of %g is %g\n",inputValue, outputValue);return 0;}我们添加的第一个特性用来为工程和可执行文件指定一个版本号。

虽然你可以在源代码中唯一指定它,但是你在CMakeLists文件中指定它可以提供更好的灵活性。

如下所示,我么可以通过添加一个版本号来修改CMakeLists文件:cmake_minimum_required (VERSION 2.6)project (Tutorial)# 版本号set (Tutorial_VERSION_MAJOR 1)set (Tutorial_VERSION_MINOR 0)# 配置一个头文件,通过它向源代码中传递一些CMake设置。

configure_file ("${PROJECT_SOURCE_DIR}/TutorialConfig.h.in""${PROJECT_BINARY_DIR}/TutorialConfig.h")# 将二进制文件树添加到包含文件的搜索路径中,这样我们可以找到TutorialConfig.h include_directories("${PROJECT_BINARY_DIR}")# 添加可执行文件add_executable(Tutorial tutorial.cxx)由于配置过的文件将会被写到二进制文件目录下,我们必须把该目录添加到包含文件的搜索路径清单中。

然后,以下的代码就可以在源目录下创建一份TotorialConfig.h.in 文件:// 与tutorial相关的配置好的选项与设置;#define Tutorial_VERSION_MAJOR @Tutorial_VERSION_MAJOR@#define Tutorial_VERSION_MINOR @Tutorial_VERSION_MINOR@当CMake配置这份头文件时,@Tutorial_VERSION_MAJOR@和@Tutorial_VERSION_MINOR@的值将会被从CMakeLists文件中传递过来的值替代。

下一步,我们要修改tutorial.cxx来包含configured头文件然后使用其中的版本号。

修改过的源代码展列于下:// 计算平方根的简单程序。

#include <stdio.h>#include <stdlib.h>#include <math.h>#include "TutorialConfig.h"int main (int argc, char *argv[]){if (argc < 2){fprintf(stdout,"%s Version %d.%d\n",argv[0],Tutorial_VERSION_MAJOR,Tutorial_VERSION_MINOR);fprintf(stdout,"Usage: %s number\n",argv[0]);return 1;}double inputValue = atof(argv[1]);double outputValue = sqrt(inputValue);fprintf(stdout,"The square root of %g is %g\n",inputValue, outputValue);return 0;}引入库(步骤2)现在我们将会在我们的工程中引入一个库。

这个库会包含我们自己实现的计算一个数的平方根的函数。

可执行文件随后可以使用这个库文件而不是编译器提供的标准开平方函数。

在本指南中,我们将会把库文件放到一个子目录MathFunctions中。

它包含下述的单行CMakeLists文件:add_library(MathFunctions mysqrt.cxx)源文件mysqrt.cxx有一个叫做mysqrt的函数,它提供了与编译器的sqrt函数类似的功能。

为了使用新的库,我们在顶层的CMakeLists中增加一个add_subrirectory调用,这样这个库也会被构建。

我们也要向可执行文件中增加另一个头文件路径,这样就可以从MathFunctions/mysqrt.h头文件中找到函数的原型。

最后的一点更改是在向可执行文件中引入新的库。

顶层CMakeLists文件的最后几行现在看起来像是这样:include_directories ("${PROJECT_SOURCE_DIR}/MathFunctions")add_subdirectory (MathFunctions)# 引入可执行文件add_executable (Tutorial tutorial.cxx)target_link_libraries (Tutorial MathFunctions)现在,让我们考虑下让MathFunctions库变为可选的。

在本指南中,确实没有必要这样画蛇添足;但是对于更大型的库或者依赖于第三方代码的库,你可能需要这种可选择性。

第一步是为顶层的CMakeLists文件添加一个选项:# 我们应该使用我们自己的数学函数吗?option (USE_MYMATH"Use tutorial provided math implementation" ON)这将会在CMake的GUI中显示一个默认的ON值,并且用户可以随需改变这个设置。

这个设置会被存储在cache中,那么用户将不需要在cmake该工程时,每次都设置这个选项。

第二处改变是,让链接MathFunctions库变为可选的。

要实现这一点,我们修改顶层CMakeLists文件的结尾部分:# 添加MathFunctions库吗?if (USE_MYMATH)include_directories ("${PROJECT_SOURCE_DIR}/MathFunctions")add_subdirectory (MathFunctions)set (EXTRA_LIBS ${EXTRA_LIBS} MathFunctions)endif (USE_MYMATH)# 添加可执行文件add_executable (Tutorial tutorial.cxx)target_link_libraries (Tutorial ${EXTRA_LIBS})这里用USE_MYMATH设置来决定是否MathFunctions应该被编译和执行。

注意到,要用一个变量(在这里是EXTRA_LIBS)来收集所有以后会被连接到可执行文件中的可选的库。

这是保持带有许多可选部件的较大型工程干净清爽的一种通用的方法。

源代码对应的改变相当直白,如下所示:// 计算一个数平方根的简单程序#include <stdio.h>#include <stdlib.h>#include <math.h>#include "TutorialConfig.h"#ifdef USE_MYMATH#include "MathFunctions.h"#endifint main (int argc, char *argv[]){if (argc < 2){fprintf(stdout,"%s Version %d.%d\n", argv[0],Tutorial_VERSION_MAJOR,Tutorial_VERSION_MINOR);fprintf(stdout,"Usage: %s number\n",argv[0]);return 1;}double inputValue = atof(argv[1]);#ifdef USE_MYMATHdouble outputValue = mysqrt(inputValue);#elsedouble outputValue = sqrt(inputValue);#endiffprintf(stdout,"The square root of %g is %g\n",inputValue, outputValue);return 0;}在源代码中,我们也使用了USE_MYMATH。

相关文档
最新文档