在linux平台下使用CMake生成Makefile并编译的流程如下: 编写 CMake 配置文件 CMakeLists.txt; 执行命令cmake PATH或者ccmake PATH生成Makefile...中的源文件需要编译成一个名称为Demo2的可执行文件。...例如,可以将MathFunctions库设为一个可选的库,如果该选项为ON,就使用该库定义的数学函数来进行运算。否则就调用标准库中的数学函数库。...修改src目录下的CMakeLists 文件 我们要做的第一步是在src目录的 CMakeLists.txt 文件中添加该选项: # 设置c++的版本并添加多线程的使用 set(CMAKE_CXX_FLAGS...CMake 从config.hpp.in 生成,通过这样的机制,将可以通过预定义一些参数和变量来控制代码的生成。
采用自动化的项目构建工具cmake 可以将程序员从复杂的makefile 文件中解脱出来。...build —– 编译目录,存放编译生成的中间文件 cmake 要求工程主目录和所有存放源代码子目录下都要编写CMakeLists.txt 文件,注意大小写(cm 大写,list中...CMakeLists.txt 文件中不区分大小写 2....如上便是工程server_project 主目录src 下的CMakeLists.txt 文件,下一篇我们解释子目录utiltiy中的CMakeLists.txt 文件。...表示要编译的源文件,所有的源文件都要罗列到此处。set 设置变量,变量名SOURCE_FILES自定义。 2.
:cmake 命令,通常写在 CMakeLists.txt / *.cmake 文件中调用的内置语法和函数都称之为 cmake 命令cmake-generator-expressions:生成器表达式,...,下述样例属于cmake 控制台命令:配置:输入源文件目录,指定目标编译系统,添加编译选项,生成目标编译系统编译:输入目标编译系统,执行编译安装(可选):将编译产物安装到指定位置(需要 CMakeLists.txt...中的target产物也在该缓存文件夹平台差分跨平台项目中通常会遇到不同平台参与编译的头文件不一样,或者编译选项不同,在 cmake 里有一些描述平台的系统变量:CMAKE_SYSTEM_NAME:描述目标平台名称...pathA 的定义,libB 依赖 libA 时无需再手动添加 include pathA,target 应当做到自给自足自定义目标在 cmake 中,除了库和执行文件可以作为目标,一些自定义操作也可以作为目标...生成文件的自定义目标假设用于需要将一个文件转换成另外一个文件,如:protobuf 通过 IDL 生成源文件,样例如下:add_custom_command( OUTPUT out.cc COMMAND
这行命令是可选的,我们可以不写这句话,但在有些情况下,如果CMakeLists.txt文件中使用了一些高版本cmake特有的一些命令的时候,就需要加上这样一行,提醒用户升级到该版本之后再执行cmake。...内部构建方法中,cmake生成的中间文件和可执行文件都会存放在项目目录中;外部构建方法中,中间文件与可执行文件都存放在build目录中。 笔者强烈建议使用外部构建方法。...如果cmake参数和CMakeLists.txt文件中都不指定该值的话,则该值为默认的/usr/local。 4....ADD_EXECUTABLE 格式: ADD_EXECUTABLE(exename srcname) exename:可执行文件名 srcname:生成该可执行文件的源文件 该命令给出源文件名称,并指出需要编译出的可执行文件名...,定义了该工程会生成一个名为CRNode的可执行文件,所依赖的源文件是变量SRC_LIST定义的源文件列表。
示例代码 首先看一下测试代码的全貌: mylib:只有一个源文件,编译输出一个动态库; myapp:也只有一个源文件,链接 mylib 动态库,编译输出一个可执行程序; mylib 在mylib目录中...补充:在 windows 系统中,编译动态库时会生成 xxx.dll 和 xxx.lib。xxx.dll 中是真正的库文件指令,xxx.lib 中仅仅是符号表。...文件: // mylib/CMakeLists.txt 文件 CMAKE_MINIMUM_REQUIRED(VERSION 3.5) PROJECT(mylib VERSION 1.0.0) # 自定义宏...根据不同的平台,定义相应的宏,并且添加了mylib和myapp这两个子文件夹。...配置的结果输出在最下面窗口中的output标签中,如下所示: 这就表明cmake配置成功,正确的执行了每一个文件夹下的 CMakeLists.txt 文件。
它可以根据不同平台、不同的编译器,并通过CMakeLists.txt文件中简单的语句来描述所有平台的编译过程,生成相应的Makefile文件或project文件。...:cmake脚本配置文件,cmake会根据该脚本文件中的指令去编译相关的C/C++源文件,并将编译后产物生成共享库或静态块,然后Gradle将其打包到APK中。...CMakeLists.txt文件解析如下: 指定cmake版本cmake_minimum_required(VERSION 3.4.1) add_library命令用于向cmake添加依赖库或者源文件...如果要在native-lib.cpp文件中添加新的方法,必须添加在extern"C" { } 中,或者在每个方法前加extern"C", 否则会报找不到方法。...; CMake 按照构建脚本中的命令将 C++ 源文件 native-lib.cpp 编译到共享的对象库中,并命名为 libnative-lib.so,Gradle 随后会将其打包到 APK 中; 运行时
这里我们使用CMake。 在一个CMake工程中,我们会使用cmake命令生成一个Makefile文件,然后,用make命令根据这个 makefile文件的内容来编译整个工程。...例如,可以将 MathFunctions 库设为一个可选的库,如果该选项为 ON ,就使用该库定义的数学函数来进行运算。否则就调用标准库中的数学函数库。...修改 CMakeLists 文件 第一步是在顶层的 CMakeLists.txt 文件中添加该选项: # CMake 最低版本号要求 cmake_minimum_required (VERSION 2.8...7行的 configure_file 命令用于加入一个配置头文件 config.h ,这个文件由 CMake 从 config.h.in 生成,通过这样的机制,将可以通过预定义一些参数和变量来控制代码的生成...会自动根据 CMakeLists 配置文件中的设置自动生成 config.h 文件 编译项目 现在编译一下这个项目,为了便于交互式的选择该变量的值,可以使用 ccmake 命令
}:此处为生成库文件的源码路径,该变量在前面已经被定义。...CMakeLists.txt文件如下: # CMake最低版本要求 CMAKE_MINIMUM_REQUIRED(VERSION 2.8) # 添加源文件中的#include路径 INCLUDE_DIRECTORIES...生成图像客户端目标文件,是基于之前自定义函数部分中的imageprocessing_fun的图像处理函数的,而之前这些函数已经被处理为库文件,被存储在工程生成路径下的lib路径中,所以指令LINK_DIRECTORIES...imageprocessing_fun:依赖库文件 该库文件是由前面2.(1)中/CustomizeFunctions/GeneralImageProcess/CMakeLists.txt文件生成的;.../:查找的路径 LIB_SERVER_SOURCE:将上述路径中的源文件列表存入该变量 经过这条指令,可以查找当前CMakeLists文件所在路径下的所有源文件,并将整个源文件列表存入变量LIB_SERVER_SOURCE
C和C++ 该指定隐式定义了两个CMAKE的变量 _BINARY_DIR,本例中是 HELLO_BINARY_DIR _SOURCE_DIR,本例中是...ADD_EXECUTABLE关键字 作用:生成可执行文件 ADD_EXECUTABLE(hello ${SRC_LIST}) 生成的可执行文件名是hello,源文件读取变量SRC_LIST中的内容...内部构建和外部构建 上述例子就是内部构建,他生产的临时文件特别多,不方便清理 外部构建,就会把生成的临时文件放在build目录下,不会对源文件有任何影响强烈使用外部构建方式 外部构建方式举例 //例子目录...,生成的名字前面会加上lib,最终产生的文件是libhello.so SHARED,动态库 STATIC,静态库 ${LIBHELLO_SRC} :源文件 同时构建静态和动态库 // 如果用这种方式...安装共享库和头文件 本例中我们将 hello 的共享库安装到/lib目录, 将 hello.h 安装到/include/hello 目录 //文件放到该目录下 INSTALL(FILES hello.h
CMake 说明 cmake的定义是什么 ?...ADD_EXECUTABLE关键字 生成可执行文件 ADD_EXECUTABLE(hello ${SRC_LIST}) 生成的可执行文件名是hello,源文件读取变量SRC_LIST中的内容 也可以直接写...外部构建,就会把生成的临时文件放在build目录下,不会对源文件有任何影响强烈使用外部构建方式 外部构建方式举例 //例子目录,CMakeLists.txt和上面例子一致 [root@localhost...,生成的名字前面会加上lib,最终产生的文件是libhello.so SHARED,动态库 STATIC,静态库 ${LIBHELLO_SRC} :源文件 同时构建静态和动态库 // 如果用这种方式...安装共享库和头文件 本例中我们将 hello 的共享库安装到/lib目录, 将 hello.h 安装到/include/hello 目录 //文件放到该目录下 INSTALL(FILES hello.h
指定 cmake 的最小版本 cmake_minimum_required(VERSION 3.4.1) 这行命令是可选的,我们可以不写这句话,但在有些情况下,如果 CMakeLists.txt 文件中使用了一些高版本...一般我们采用 cmake 的 out-of-source 方式来构建(即生成的中间产物和源代码分离),这样做可以让生成的文件和源文件不会弄混,且目录结构看起来也会清晰明了。...例如,可以将 MathFunctions 库设为一个可选的库,如果该选项为 ON ,就使用该库定义的数学函数来进行运算,否则就调用标准库中的数学函数库。...命令用于加入一个配置头文件 config.h ,这个文件由 cmake 从 config.h.in 生成,通过这样的机制,将可以通过预定义一些参数和变量来控制代码的生成。...会自动根据 CMakeLists.txt 配置文件中的设置自动生成 config.h 文件。
为了允许传统和 CMake 配置在一段时间内共存,一个典型的策略是将所有 CMake 代码收集在CMakeLists.txt文件中,并将所有辅助 CMake 源文件放在cmake子目录下。...在我们的示例中,我们不会引入cmake子目录,而是将辅助文件更靠近需要它们的目标和源文件,但我们会注意保持几乎所有用于传统 Autotools 构建的文件不变,只有一个例外:我们将对自动生成的文件进行少量修改...如何组织文件 我们将收集生成这些文件的函数在src/autogenerate.cmake中,包含此模块,并在定义可执行目标之前在src/CMakeLists.txt中调用这些函数: # generate...正如我们在前几章中讨论的那样,这避免了许多陷阱: 它使我们能够避免文件被多次生成,以防我们不小心多次包含该模块。...我们将在这里介绍的另一种替代方案也是跨平台的,即将测试步骤定义在一个单独的 CMake 脚本中,并从add_test执行该脚本。
我们准备一下这两个文件。其中main.c是我们要编译的源文件,CMakeLists.txt是关键,他就是告诉cmake如何编译。可以理解为编译的规则。...编译测试:首相执行命令cmake .命令,该命令会根据CMakeLists.txt的规则构建出Makefile,然后执行make命令,生成可执行程序,然后运行....指令 ADD_EXECUTABLE 语法 ADD_EXECUTABLE([BINARY] [SOURCE_LIST]) 说明 定义了这个工程会生成一个文件名为[BINARY]可执行文件,相关的源文件是...SOURCE_LIST 中定义的源文件列表 内部构建和外部构建 在上面的例程中,我们是采用的内部构建,会看到cmake生成的临时文件比我们编写的源文件还要多,而且在同一级目录下。...:~/rice_file/cmake$ 过程:创建目录build,然后在build目录下执行cmake,将构建的中间文件生成到build下,这样源文件就很干净。
CMake工具 它首先允许开发者编写一种平台无关的 CMakeLists.txt 文件来定制整个编译流程,然后再根据目标用户的平台进一步生成所需的本地化 Makefile 或工程文件,如Linux 下的...定义变量 源文件较多时,可以定义一个变量来保存,后续只需要引用该变量即可,如下,定义src_list来保存源文件列表,引用变量则使用${}包裹....命令 CMakeLists.txt文件基本上就是由命令和参数组成的,例如之前的set、message这些,下面就了解一下常用的命令 add_executable使用给定的源文件,生成一个可执行程序 add_library...使用给定的源文件,生成一个库(静态库或共享库) add_subdirectory添加一个子目录,该子目录也必须包含一个CMakeLists.txt文件 include_directories添加头文件路径...,以上述calc目录下的CMakeLists.txt文件为例,这时可以使用aux_source_directory命令 cmake_minimum_required (VERSION 2.8) # 获取当前目录下的源文件路径列表
CMake解析配置文件CMakeLists.txt生成Makefile,相比直接用Makefile管理工程,CMake更灵活和简单。 简单的例子 一个完整的Demo可参考这里。...MinSizeRel CMAKE_C_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_MINSIZEREL 在CMakeLists.txt中可以自定义编译选项变量 set(CMAKE_CXX_FLAGS_RELEASE...大意就是,GLOB收集的源文件增加或删除,而CMakeLists.txt没有发生修改时,CMake不能识别这些文件。.../lib ) 添加生成目标 使用SRC_LIST源文件列表里的文件生成一个可执行文件hello add_executable(hello ${SRC_LIST}) 使用SRC_LIST源文件列表里的文件生成一个静态链接库...自定义Makefile目标的完整例子 下面的CMakeLists.txt添加一个自定义目标proto,该目标在编译工程前,会先调用protobuf程序编译先生成Google Protocol Buffers
这段代码可以放置在您项目的根目录下的CMakeLists.txt文件中,当执行cmake命令时,CMake会根据这个配置文件来进行构建。 您可以根据实际情况修改路径以匹配您系统中C编译器的安装路径。...CMakeCCompilerId.c是由CMake生成的一个源文件,用于在构建过程中确定C编译器的身份和功能。它在构建过程中被用来测试编译器的功能和特性,并产生一个唯一的标识符来表示编译器。...这个源文件会根据不同的编译器,运行不同的代码,并生成一个包含编译器相关信息的对象文件。...CMake生成一个预处理命令(preprocessor command),将CMakeCCompilerId.c源文件作为输入,并传递编译器标志和预定义宏。...预处理完后,编译器编译生成目标文件。 CMakeCCompilerId.c源文件中包含一些测试性的代码,用来检测编译器的特性和标识编译器。
add_executable:将名为 main.c 的源文件编译成一个名称为 Demo 的可执行文件 2、开始构建 所有的文件创建完成后,demo1目录中应该存在main.c和CMakeLists.txt...中的源文件需要编译成一个名称为 demo 的可执行文件。...子目录中的 CMakeLists.txt # 查找当前目录下的所有源文件 # 并将名称保存到 DIR_LIB_SRCS 变量 aux_source_directory(....例如,可以将 calc 库设为一个可选的库,如果该选项为 ON ,就使用该库定义的函数来进行运算。否则就调用标准库中的运算符进行操作。 还是之前的代码,在此基础上进行增删。...修改 CMakeLists 文件 我们要做的第一步是在顶层的 CMakeLists.txt 文件中添加该选项: # CMake 最低版本号要求 cmake_minimum_required (VERSION
CMakeLists.txt,"#"后面为注释的内容,CMake的命令全部为大写 第2行指定生成的工程名为test_math 第4行指定头文件目录为include 第8行指定源文件目录为src,并将其赋值给环境变量...>> 建立一个新的目录,在该目录中执行cmake生成Makefile文件,这样编译结果会保存在该目录——类似 >> SET_TARGET_PROPERTIES(ss7gw PROPERTIES...>> 建立一个新的目录,在该目录中执行cmake生成Makefile文件,这样编译结果会保存在该目录——类似 >> SET_TARGET_PROPERTIES(ss7gw PROPERTIES...处理多源文件目录时 cmake 的执行结果 在执行 cmake 的过程中,首先解析目录 step2 中的 CMakeLists.txt ,当程序执行命令 ADD_SUBDIRECTORY( src...处理多源文件目录时 cmake 的执行结果 在执行 cmake 的过程中,首先解析目录 step2 中的 CMakeLists.txt ,当程序执行命令 ADD_SUBDIRECTORY( src
所在的子目录中,使用上述方式可能会导致找不到头文件的错误。...跨平台支持:CMake可以生成适用于多种操作系统和编译器的构建脚本。这意味着你可以使用相同的CMake配置文件在不同的平台上构建你的项目。...编写CMakeLists.txt文件:在CMakeLists.txt文件中,使用CMake提供的语法和命令来描述项目的构建过程,例如定义变量、设置编译选项、添加源文件、链接库等。...运行CMake:使用CMake命令行工具或者图形界面工具,指定CMakeLists.txt文件的路径,然后运行CMake。CMake会解析CMakeLists.txt文件,并生成相应的构建脚本。...构建生成的目标:构建过程完成后,可以通过运行生成的可执行文件、库文件或者其他目标来运行、测试或部署你的项目。
NDK 配置 1 : 配置 AS 工程中的 C/C++ 源文件的编译 // defaultConfig 内部的 externalNativeBuild 配置的是配置 AS 工程的...NDK 配置 : 配置 AS 工程中的 C/C++ 源文件的编译构建脚本 // 配置 NDK 的编译脚本路径 // 编译脚本有两种 ① CMakeList.txt ② Android1...NDK 配置 1 : 配置 AS 工程中的 C/C++ 源文件的编译 // defaultConfig 内部的 externalNativeBuild 配置的是配置 AS 工程的...NDK 配置 : 配置 AS 工程中的 C/C++ 源文件的编译构建脚本 // 配置 NDK 的编译脚本路径 // 编译脚本有两种 ① CMakeList.txt ② Android1..., 在 该参数后面指定库的路径 # CMAKE_SOURCE_DIR 指的是当前的文件地址 # -L 参数指定动态库的查找路径 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS
领取专属 10元无门槛券
手把手带您无忧上云