cmake使用示例与整理总结
- 格式:doc
- 大小:73.00 KB
- 文档页数:14
CMake是一个开源的、跨平台的自动化构建系统,它能够用来管理软件构建过程,支持多种编译器和操作系统。
在CMake中,测试用例通常使用CTest测试框架来执行。
以下是一个简单的CMake测试用例的示例:1. 首先,创建一个名为“test”的目录,并在该目录下创建一个名为“CMakeLists.txt”的文件。
2. 在“CMakeLists.txt”文件中,添加以下内容:```cmakecmake_minimum_required(VERSION 3.10)project(my_test)enable_testing()add_executable(test_main main.cpp)add_test(NAME test_main COMMAND test_main)```这个CMakeLists.txt文件定义了一个名为“my_test”的项目,启用了测试功能,并添加了一个名为“test_main”的可执行文件和一个名为“test_main”的测试用例。
3. 在“test”目录下创建一个名为“main.cpp”的文件,并添加以下内容:```cpp#include <iostream>int main() {std::cout << "Hello, world!" << std::endl;return 0;}```这个简单的C++程序将输出“Hello, world!”。
4. 在“test”目录下打开终端,并运行以下命令来生成构建文件:```bashcmake ..```5. 接下来,运行以下命令来构建和运行测试:```bashmake test```如果一切正常,你将会看到“PASSED: test_main”的输出,表示测试用例成功执行。
如果测试用例失败,将会显示相应的错误信息。
cmake例子CMake是一个跨平台的自动化工具,它可以帮助程序员管理他们的软件项目。
它使用一个简单的语言来描述构建过程,并生成适合不同平台的构建脚本。
CMake支持多种编程语言,包括C++、Java和Python等。
下面我们来看一个简单的CMake例子:```# CMake最低版本要求cmake_minimum_required(VERSION 3.10)# 项目名称project(MyProject)# 设置编译器set(CMAKE_CXX_COMPILER "g++")# 设置编译选项set(CMAKE_CXX_FLAGS "-std=c++11 -Wall")# 添加源文件add_executable(MyProgram main.cpp)```以上代码通过CMake构建了一个名为MyProgram的可执行文件。
下面我们来逐行解释:1. cmake_minimum_required(VERSION 3.10)该命令指定了所需的最低版本号,这里是3.10。
2. project(MyProject)该命令指定了项目名称为MyProject。
3. set(CMAKE_CXX_COMPILER "g++")该命令设置了编译器为g++。
4. set(CMAKE_CXX_FLAGS "-std=c++11 -Wall")该命令设置了编译选项,其中-std=c++11表示使用C++11标准,-Wall表示开启所有警告信息。
5. add_executable(MyProgram main.cpp)该命令添加了源文件main.cpp,并生成名为MyProgram的可执行文件。
以上就是一个简单的CMake例子。
接下来我们来看一些常用的CMake命令:1. add_library该命令用于添加一个静态或动态库。
```add_library(MyLibrary STATIC lib.cpp)```2. target_link_libraries该命令用于将库链接到可执行文件中。
路径管理工具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手册概述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 install 例子-回复cmake install 是用于配置和安装CMake 项目的命令。
CMake 是一个跨平台的开源构建工具,它可以自动生成适用于不同操作系统的构建脚本。
通过cmake install 命令,我们可以将编译好的二进制文件、库文件、头文件和配置文件等打包并安装到系统的指定位置。
在本文中,我们将逐步介绍cmake install 的使用方法及其相关概念。
第一步:安装CMake在使用cmake install 命令之前,首先需要安装CMake 工具。
CMake 提供了官方的安装程序和预编译包,可以从其官方网站( 下载适用于各个操作系统的安装程序,并按照说明进行安装。
安装完成后,可以在命令行界面执行cmake version 命令,以确保CMake 安装成功。
第二步:编写CMakeLists.txt 文件CMake 使用CMakeLists.txt 文件来描述项目的构建过程。
CMakeLists.txt 文件通常包含多个命令,而其中的install 命令用于配置安装过程。
我们可以在CMakeLists.txt 文件中指定需要安装的目标文件,以及将这些文件安装到何处。
下面是一个简单的示例CMakeLists.txt 文件:cmake_minimum_required(VERSION 3.10)project(MyProject)add_executable(myapp main.cpp)# 将可执行文件安装到/usr/local/bin 目录install(TARGETS myapp DESTINATION /usr/local/bin)在上述示例中,我们首先指定了CMake 最低版本号,然后定义了一个名为MyProject 的项目。
add_executable 命令将主程序文件main.cpp 添加到我们的项目中。
最后一行的install 命令用于将myapp 目标(即可执行文件)安装到/usr/local/bin 目录。
cmake file用法
CMake是一个跨平台的自动化构建工具,主要用于控制编译过程,简化不同平台上的编译过程。
它使用名为CMakeLists.txt的文件来描述构
建过程。
CMakeLists.txt文件是一个文本文件,其中包含CMake的命令和语法。
下面是一个简单的CMakeLists.txt示例:
cmake
cmake_minimum_required(VERSION 3.10) # 设置最小的CMake版本要
求
project(my_project) # 设置项目名称
set(CMAKE_CXX_STANDARD 11) # 设置C++标准
add_executable(my_project main.cpp) # 添加可执行文件,指定源
代码文件
这个示例展示了几个基本的CMake命令:
cmake_minimum_required:设置最小的CMake版本要求。
project:设置项目名称,该名称将用于生成构建文件。
set:设置变量值,例如CMAKE_CXX_STANDARD用于设置C++标准。
add_executable:添加一个可执行文件,并指定源代码文件。
要使用CMake构建项目,可以按照以下步骤操作:
1. 创建一个目录,用于存放源代码和CMakeLists.txt文件。
2. 在该目录下创建一个名为CMakeLists.txt的文件,并将上面的示例代码复制到该文件中。
3. 在终端中进入该目录,并运行以下命令来生成构建文件:
lua
cmake .
4. 生成构建文件后,可以使用以下命令来构建项目:
makefile
make。
cmake 常用语句CMake是一个用于跨平台构建和管理软件项目的工具。
以下是一些CMake中常用的语句和用法:1. "project"语句:project(project_name)用于定义项目的名称,可以在CMakeLists.txt文件的开头使用。
2. "add_executable"语句:add_executable(executable_name source_files)用于将源代码文件编译为可执行文件。
3. "add_library"语句:add_library(library_name source_files)用于构建静态库或共享库。
4. "target_link_libraries"语句:target_link_libraries(target_name library_name)用于将特定的库链接到目标文件中。
5. "include_directories"语句:include_directories(directory)用于添加包含文件的目录。
6. "set"语句:set(variable value)用于设置变量的值。
7. "if"语句:if(condition)# codeelse()# codeendif()用于条件判断和执行不同的代码块。
8. "foreach"语句:foreach(variable range)# codeendforeach()用于遍历一个范围内的变量。
9. "cmake_minimum_required"语句:cmake_minimum_required(VERSION version)用于指定CMake的最低版本要求。
10. "find_package"语句:find_package(package_name)用于搜索和加载特定的软件包。
windows cmake用法CMake是一个跨平台的开源构建系统,它可以用来控制软件编译过程的生成工具。
在Windows操作系统上,CMake可以用于配置和生成用于Visual Studio等集成开发环境的项目文件,以便于进行软件的编译和构建。
在Windows上使用CMake的基本步骤如下:1. 安装CMake,首先需要从CMake官方网站上下载并安装CMake的Windows版本。
安装完成后,可以在命令行中使用cmake命令。
2. 创建CMakeLists.txt文件,在你的项目根目录下创建一个名为CMakeLists.txt的文件,这个文件包含了项目的构建信息和依赖关系。
在这个文件中,你需要指定项目的名称、要求的最低版本号、包含的源文件等信息。
3. 选择生成器:在命令行中使用cd命令切换到项目的根目录,然后使用cmake命令指定生成器。
比如,如果你想要生成Visual Studio项目文件,可以使用类似下面的命令:cmake -G "Visual Studio 16 2019" .这会在当前目录下生成Visual Studio 2019的项目文件。
4. 构建项目,生成项目文件后,可以使用生成的项目文件进行编译和构建。
如果使用的是Visual Studio生成器,可以直接打开生成的.sln文件进行编译和构建。
总的来说,使用CMake在Windows上的基本步骤包括安装CMake、创建CMakeLists.txt文件、选择生成器并生成项目文件、最后使用生成的项目文件进行编译和构建。
希望这些信息能够帮助你更好地理解在Windows上使用CMake的方法。
cmakeforeach用法在CMake中,foreach命令用于遍历列表并为每个元素执行一系列操作。
foreach命令的一般语法如下:```foreach(<loop_variable> <items_to_iterate>)endforeach```下面是一些常见的foreach用法示例:1.遍历列表:假设有一个列表`fruit_list`包含多个水果名称,可以使用foreach 遍历并输出每个水果名称:```cmakeset(fruit_list "apple" "banana" "orange")foreach(fruit ${fruit_list})message("Fruit: ${fruit}")endforeach```上述代码会输出以下内容:```Fruit: appleFruit: bananaFruit: orange```2.遍历范围:除了遍历列表,你也可以遍历一个范围内的数字。
例如:```cmakeforeach(i RANGE 1 5)message("Number: ${i}")endforeach```上述代码会输出以下内容:```Number: 1Number: 2Number: 3Number: 4Number: 5```3.遍历字符串:如果要遍历一个字符串,可以使用`LIST`关键字将其转换为一个列表。
```cmakeforeach(letter RANGE A Z)message("Letter: ${letter}")endforeach```上述代码会输出以下内容:```Letter: ALetter: BLetter: C...Letter: Z```4.遍历目录文件:在CMake中,可以使用`FILE`关键字来获取一个目录下的所有文件,并将其放入一个列表中。
大型工程的cmake示例以下是一个大型工程的 CMake 示例:```cmakecmake_minimum_required(VERSION 3.10)# 设置项目名称project(MyProject)# 设置可执行文件的输出路径set(EXECUTABLE_OUTPUT_PATH ${CMAKE_SOURCE_DIR}/bin)# 添加头文件路径include_directories(${CMAKE_SOURCE_DIR}/include)# 添加子目录add_subdirectory(src)add_subdirectory(lib1)add_subdirectory(lib2)# 将源文件列表保存到变量中set(SOURCESsrc/main.cppsrc/foo.cppsrc/bar.cpp)# 生成可执行文件add_executable(MyExecutable ${SOURCES})# 链接库target_link_libraries(MyExecutable Lib1 Lib2)```以上示例中,CMakeLists.txt 文件包含了以下几个部分:1. `cmake_minimum_required(VERSION 3.10)`:指定 CMake 的最低版本。
2. `project(MyProject)`:设置项目名称。
3. `set(EXECUTABLE_OUTPUT_PATH${CMAKE_SOURCE_DIR}/bin)`:设置可执行文件的输出路径。
4. `include_directories(${CMAKE_SOURCE_DIR}/include)`:添加头文件路径。
5. `add_subdirectory(src)`:添加子目录,这个子目录下包含了源文件。
6. `add_subdirectory(lib1)` 和 `add_subdirectory(lib2)`:添加其他子目录,这些子目录包含了需要编译成库的源文件。
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 控制默认的库编译方式。
如果未进行设置,使用ADD_LIBRARY时又没有指定库类型,默认编译生成的库都是静态库(可在t3中稍加修改进行验证)∙CMAKE_C_FLAGS 设置C编译选项∙CMAKE_CXX_FLAGS 设置C++编译选项cmake常用命令基本语法规则:∙cmake变量使用${}方式取值,但是在IF控制语句中是直接使用变量名∙环境变量使用$ENV{}方式取值,使用SET(ENV{VAR} VALUE)赋值∙指令(参数1 参数2…)参数使用括弧括起,参数之间使用空格或分号分开。
∙以ADD_EXECUTABLE指令为例:∙ADD_EXECUTABLE(hello main.c func.c)或者∙ADD_EXECUTABLE(hello main.c;func.c)∙指令是大小写无关的,参数和变量是大小写相关的。
推荐你全部使用大写指令。
部分常用命令列表:∙PROJECTPROJECT(projectname [CXX] [C] [Java])指定工程名称,并可指定工程支持的语言。
支持语言列表可忽略,默认支持所有语言∙SETSET(VAR [VALUE] [CACHE TYPE DOCSTRING [FORCE]])定义变量(可以定义多个VALUE,如SET(SRC_LIST main.c util.c reactor.c)) ∙MESSAGEMESSAGE([SEND_ERROR | STATUS | FATAL_ERROR] “message todisplay”…)向终端输出用户定义的信息或变量的值SEND_ERROR, 产生错误,生成过程被跳过STATUS, 输出前缀为—的信息FATAL_ERROR, 立即终止所有cmake过程∙ADD_EXECUTABLEADD_EXECUTABLE(bin_file_name ${SRC_LIST})生成可执行文件∙ADD_LIBRARYADD_LIBRARY(libname [SHARED | STATIC | MODULE][EXCLUDE_FROM_ALL] SRC_LIST)生成动态库或静态库SHARED 动态库STATIC 静态库MODULE 在使用dyld的系统有效,若不支持dyld,等同于SHARED EXCLUDE_FROM_ALL 表示该库不会被默认构建∙SET_TARGET_PROPERTIES设置输出的名称,设置动态库的版本和API版本∙CMAKE_MINIMUM_REQUIREDCMAKE_MINIMUM_REQUIRED(VERSION version_number[FATAL_ERROR])声明CMake的版本要求∙ADD_SUBDIRECTORYADD_SUBDIRECTORY(src_dir [binary_dir] [EXCLUDE_FROM_ALL]) 向当前工程添加存放源文件的子目录,并可以指定中间二进制和目标二进制的存放位置EXCLUDE_FROM_ALL含义:将这个目录从编译过程中排除∙SUBDIRSdeprecated,不再推荐使用(hello sample)相当于分别写ADD_SUBDIRECTORY(hello),ADD_SUBDIRECTORY(sample)∙INCLUDE_DIRECTORIESINCLUDE_DIRECTORIES([AFTER | BEFORE] [SYSTEM] dir1 dir2 …) 向工程添加多个特定的头文件搜索路径,路径之间用空格分隔,如果路径包含空格,可以使用双引号将它括起来,默认的行为为追加到当前头文件搜索路径的后面。
有如下两种方式可以控制搜索路径添加的位置:o CMAKE_INCLUDE_DIRECTORIES_BEFORE,通过SET这个cmake 变量为on,可以将添加的头文件搜索路径放在已有路径的前面o通过AFTER或BEFORE参数,也可以控制是追加还是置前∙LINK_DIRECTORIESLINK_DIRECTORIES(dir1 dir2 …)添加非标准的共享库搜索路径∙TARGET_LINK_LIBRARIESTARGET_LINK_LIBRARIES(target lib1 lib2 …)为target添加需要链接的共享库∙ADD_DEFINITIONS向C/C++编译器添加-D定义ADD_DEFINITIONS(-DENABLE_DEBUG -DABC),参数之间用空格分隔∙ADD_DEPENDENCIESADD_DEPENDENCIES(target-name depend-target1depend-target2 …)定义target依赖的其他target,确保target在构建之前,其依赖的target已经构建完毕∙AUX_SOURCE_DIRECTORYAUX_SOURCE_DIRECTORY(dir VAR)发现一个目录下所有的源代码文件并将列表存储在一个变量中把当前目录下的所有源码文件名赋给变量DIR_HELLO_SRCS∙EXEC_PROGRAMEXEC_PROGRAM(Executable [dir where to run] [ARGS<args>][OUTPUT_VARIABLE <var>] [RETURN_VALUE <value>])用于在指定目录运行某个程序(默认为当前CMakeLists.txt所在目录),通过ARGS添加参数,通过OUTPUT_VARIABLE和RETURN_VALUE获取输出和返回值,如下示例∙# 在src中运行ls命令,在src/CMakeLists.txt添加∙EXEC_PROGRAM(ls ARGS "*.c" OUTPUT_VARIABLE LS_OUTPUT RETURN_V ALUE LS_RVALUE)∙IF (not LS_RVALUE)∙ MESSAGE(STATUS "ls result: "${LS_OUTPUT}) # 缩进仅为美观,语法无要求∙ENDIF(not LS_RVALUE)∙INCLUDEINCLUDE(file [OPTIONAL]) 用来载入CMakeLists.txt文件INCLUDE(module [OPTIONAL])用来载入预定义的cmake模块OPTIONAL参数的左右是文件不存在也不会产生错误可以载入一个文件,也可以载入预定义模块(模块会在CMAKE_MODULE_PATH指定的路径进行搜索)载入的内容将在处理到INCLUDE语句时直接执行∙FIND_o FIND_FILE(<VAR> name path1 path2 …)VAR变量代表找到的文件全路径,包含文件名o FIND_LIBRARY(<VAR> name path1 path2 …)VAR变量代表找到的库全路径,包含库文件名o FIND_LIBRARY(libX X11 /usr/lib)o IF (NOT libx)o MESSAGE(FATAL_ERROR "libX not found")o ENDIF(NOT libX)o FIND_PATH(<VAR> name path1 path2 …)VAR变量代表包含这个文件的路径o FIND_PROGRAM(<VAR> name path1 path2 …)VAR变量代表包含这个程序的全路径o FIND_PACKAGE(<name> [major.minor] [QUIET] [NO_MODULE] [[REQUIRED | COMPONENTS] [componets …]])用来调用预定义在CMAKE_MODULE_PATH下的Find<name>.cmake模块,你也可以自己定义Find<name>模块,通过SET(CMAKE_MODULE_PATH dir)将其放入工程的某个目录供工程使用∙IF语法:∙IF (expression)∙ COMMAND1(ARGS ...)∙ COMMAND2(ARGS ...)∙ ...∙ELSE (expression)∙ COMMAND1(ARGS ...)∙ COMMAND2(ARGS ...)∙ ...ENDIF (expression) # 一定要有ENDIF与IF对应IF (expression), expression不为:空,0,N,NO,OFF,FALSE,NOTFOUND或<var>_NOTFOUND,为真IF (not exp), 与上面相反IF (var1 AND var2)IF (var1 OR var2)IF (COMMAND cmd) 如果cmd确实是命令并可调用,为真IF (EXISTS dir) IF (EXISTS file) 如果目录或文件存在,为真IF (file1 IS_NEWER_THAN file2),当file1比file2新,或file1/file2中有一个不存在时为真,文件名需使用全路径IF (IS_DIRECTORY dir) 当dir是目录时,为真IF (DEFINED var) 如果变量被定义,为真IF (var MATCHES regex) 此处var可以用var名,也可以用${var}IF (string MATCHES regex)当给定的变量或者字符串能够匹配正则表达式regex时为真。