# 在当前目录中查找源文件,并将它们添加到SOURCES变量中 aux_source_directory(....SOURCES) # 添加可执行文件,并将源文件添加到可执行文件中 add_executable(MultiFileExample ${SOURCES}) 多文件夹 对于更复杂的项目结构,如source...(VERSION 3.10) # 设置cmake的最低版本要求为3.10 project(funclib) # 设置项目名称 # 递归查找source子目录下的所有.cpp文件, # 并将它们添加到.../lib) file(GLOB_RECURSE SOURCES "src/*.cpp") # 递归查找source子目录下的所有.cpp文件,并将它们添加到SOURCES变量中 add_library.../include) # 添加第三方库的库文件路径 link_directories(${CMAKE_SOURCE_DIR}/third_party/lib) # 递归查找source子目录下的所有
在pom文件的build节点中添加这个插件的引用: maven-assembly-plugin...single maven install 得到的jar
为了达到这个目的,我们首先需要一个程序来生成这样的表。在MathFunctions这个子目录下一个新的叫做MakeTable.cxx的源文件就是用来干这个的。...该库是我们自己的实现的用于计算数字的平方根的库。可执行文件可以使用此库,而不是使用编译器提供的标准平方根函数。 在本教程中,我们将库放入名为MathFunctions的子目录中。...在MathFunctions子目录中,提供了一个名为MakeTable.cxx的新的源文件以生成表。 查看完文件后,我们可以看到该表是作为有效的C++代码生成的,并且输出文件名作为参数传入。...中的源文件需要编译成一个名称为 Demo 的可执行文件。...子目录中的 CMakeLists.txt: # 查找当前目录下的所有源文件 # 并将名称保存到 DIR_LIB_SRCS 变量 aux_source_directory(.
/lib 路径添加到库文件搜索路径中 link_directories(/usr/lib ....# 编译 main.cpp 生成可执行文件 main add_excutable(main main.cpp) target_link_libraries : 为目标可执行文件添加需要的共享库 # 将...hello动态库文件链接到可执行文件main target_link_libraries(main hello) add_subdirectory : 向当前工程添加存放源文件的子目录,并可以指定中间二进制和目标二进制存放的位置...# 添加src子目录,src中需要有一个 CMakeLists.txt add_subdirectory(src) aux_source_directory : 发现一个目录下所有的源代码文件并将列表存储在一个变量中...# 定义 SRC 变量,其值为当前目录下所有的源代码文件 aux_source_directory(.
include 目录,这个命令会将指定的目录添加到编译器的头文件搜索路径中,使得在编译源代码时,编译器能够找到这些目录下的头文件。...二、编译目标文件——示例演示 小鱼以一个cmake 模板示例一个CMake Project的模板仓库来细说。 编写cmake 需要确认编译目标需要的源文件,以及链接需要依赖的库。...编译目标:静态库、动态库、可执行文件 这里我们需要做的有以下任务: 把 math 路径下编译成静态库; 将 main.c 编译成可执行文件,并依赖math 静态库; 将 test 路径下的测试源文件编译成执行文件...file(GLOB_RECURSE MATH_LIB_SRC src/c/math/*.c ) add_library(math STATIC ${MATH_LIB_SRC}) file:用于递归地查找与指定模式匹配的文件...递归地查找 src/c/math/ 目录及其子目录下所有的 .c 文件,并将这些文件的路径存储在 MATH_LIB_SRC 变量中。
Cmake简介 简介 CMake是一个跨平台的安装编译工具,可以用简单的语句来描述所有平台的安装(编译过程)。...…) add_subdirectory – 向当前工程添加存放源文件的子目录,并可以指定中间二进制和目标二进制存放的位置 # 添加src子目录,src中需有一个CMakeLists.txt add_subdirectory...:库文件输出的存放路径 CMake编译工程 CMake目录结构:项目主目录存在一个CMakeLists.txt文件 两种方式设置编译规则: 包含源文件的子文件夹包含CMakeLists.txt文件,主目录的...CMakeLists.txt通过add_subdirectory添加子目录即可; 包含源文件的子文件夹未包含CMakeLists.txt文件,子目录编译规则体现在主目录的CMakeLists.txt中;...build):推荐使用 将编译输出文件与源文件放到不同目录中 ## 外部构建 # 1.
不会被链接到其它目标中,但是可能会在运行时使用dlopen-系列的函数动态链接 例: # create lib , 在当前cmake 中 创建一个lib,名称为model_login,SHARED...(子目录中可以包含另一个cMakeLists.txt)。...binary_dir 指定中间二进制和目标二进制存放的位置 EXCLUDE_FROM_ALL 编译过程中排除的文件 aux_source_directory 查找目录中的所有源文件 aux_source_directory...( ) 查找指定目录dir中所有源文件的名称,并将列表存储在提供的variable中 例: aux_source_directory(....例: target_link_libraries(demo model_login) include_directories 将给定的目录添加到编译器用于搜索包含文件的目录。
平时直接使用IDE开发,所以对整个编译的过程了解的不深入,借此机会,在接下来的文章中可能会涉及到程序如何从文本文件到屏幕上的字节流输出。...) #设置Project名称 PROJECT(first) #使用指定的源文件将可执行文件添加到Project中 ADD_EXECUTABLE(hello main.cpp) 2....使用tree -L 1 命令以树状图列出目录的内容(也可只使用tree命令)。 tree -L N 以树状图显示所有文件,子文件夹显示到第 N 层 效果如下: ? 3....外层makefile文件 cmake_minimum_required(VERSION 3.5) PROJECT(second)#添加子目录ADD_SUBDIRECTORY(src) 内层...在build文件夹中进行编译 过程: 进入build文件夹 cmake .. make 注意是 cmake .. 中间文件在build文件下 ? 可执行文件所在目录 ?
更省事的方法是使用aux_source_directory命令,该命令会查找指定目录下的所有源文件,然后将结果存进指定变量名。...中的源文件需要编译成一个名称为Demo 的可执行文件。...根目录中的 CMakeLists.txt : # CMake 最低版本号要求 cmake_minimum_required (VERSION 2.8) # 项目信息 project(Demo3) # 查找当前目录下的所有源文件...子目录中的 CMakeLists.txt: # 查找当前目录下的所有源文件 # 并将名称保存到 DIR_LIB_SRCS 变量 aux_source_directory(....例如,可以将 MathFunctions 库设为一个可选的库,如果该选项为 ON ,就使用该库定义的数学函数来进行运算。否则就调用标准库中的数学函数库。
lib库 1.13 file语法 1.13.1 将文件夹所有的类型的文件添加到文件列表 例如将当前文件夹下所有.cpp文件的文件名加入到MAIN_SRC中,将当前文件夹下所有.h加入到MAIN_HDR中...*.h) 例如将当前文件夹子目录src文件夹下所有.cpp文件的文件名加入到MAIN_SRC中,将当前文件夹子目录src文件夹下所有.h加入到MAIN_HDR中。...}/src/*.h) 1.13.2 递归搜索该文件夹,将文件夹下(包含子目录)符合类型的文件添加到文件列表 例如将当前文件夹下(包括子目录下)所有.cpp文件的文件名加入到MAIN_SRC中,所有.h加入到...MAIN_HDR ${CMAKE_CURRENT_SOURCE_DIR}/*.h) # 递归搜索当前目录下src子目录 file(GLOB_RECURSE MAIN_SRC_ELSE ${CMAKE_CURRENT_SOURCE_DIR...}/src/*.cpp) file(GLOB_RECURSE MAIN_HDR_ELSE ${CMAKE_CURRENT_SOURCE_DIR}/src/*.h) # 将MAIN_SRC_ELSE中的值添加到
/src ${hello_src}) 作用: 把当前路径下src目录下的所有源文件路径放到变量hello_src中 命令:aux_source_directory( ) 作用...:查找dir路径下的所有源文件,保存到variable变量中..../src ${hello_src})之后,我就可以像这样来添加一个可执行文件:add_executable(hello ${hello_src}), 意思是用hello_src里面的所有源文件来构建hello...可执行程序, 不用手动列出src目录下的所有源文件了。...值得注意的是:aux_source_directory 不会递归包含子目录,仅包含指定的dir目录 CMake官方不建议用aux_source_directory及类似命令(file(GLOB_RECURSE
指定项目的名称 指定需要的 CMake 的最低版本 将 dir 目录下的所有源文件的名字保存在变量中 指定从一组源文件编译出一个可执行文件且命名 指定从一组源文件 source1 source2 …...sourceN 编译出一个库文件且命名 指定某个目标(可执行文件或者库文件)依赖于其他的目标 添加一个需要进行构建的子目录 指定 target 需要链接 设定变量的值为 移除变量 输出信息 设定目录...2、CMake 中的变量只有两种类型:字符串,和字符串数组。 3、变量无需声明即可赋值或者使用。未赋值的变量默认为一个空字符串。 4、与其他语言编程语言不同的是,CMake 脚本的语法中没有赋值操作。...(VERSION 2.8) ---- 将 dir 目录下的所有源文件的名字保存在变量中 命令语法:aux_source_directory( ) 使用范例:aux_source_directory...add_subdirectory(src) # 定义一个SRC_LIST变量,存放该目录下所有的源文件 aux_source_directory(.
多个源文件 同一目录,多个源文件 上面的例子只有单个源文件。现在假如把 power 函数单独写进一个名为 MathFunctions.c 的源文件里,使得这个工程变成如下的形式: ....更省事的方法是使用 aux_source_directory 命令,该命令会查找指定目录下的所有源文件,然后将结果存进指定变量名。...中的源文件需要编译成一个名称为 Demo 的可执行文件。...子目录中的 CMakeLists.txt: # 查找当前目录下的所有源文件 # 并将名称保存到 DIR_LIB_SRCS 变量 aux_source_directory(....DIR_LIB_SRCS) # 生成链接库 add_library (MathFunctions ${DIR_LIB_SRCS}) 在该文件中使用命令 add_library 将 math 目录中的源文件编译为静态链接库
build,与in-source build相对,即将编译输出文件与源文件放到不同目录中; 三、 基本结构 1,依赖CMakeLists.txt文件,项目主目标一个,主目录中可指定包含的子目录...第一个工程 现假设我们的项目中只有一个源文件 main.cpp 清单 1 源文件 main.cpp cmake 简介 CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装...build,与in-source build相对,即将编译输出文件与源文件放到不同目录中; 三、 基本结构 1,依赖CMakeLists.txt文件,项目主目标一个,主目录中可指定包含的子目录...第四行使用命令 ADD_EXECUTABLE 指示变量 DIR_SRCS 中的源文件需要编译 成一个名称为 main 的可执行文件。...第四行使用命令 ADD_EXECUTABLE 指示变量 DIR_SRCS 中的源文件需要编译 成一个名称为 main 的可执行文件。
将给定的目录添加到编译器用于搜索包含文件(如头文件)的目录中,相对路径被解释为相对于当前源目录。...}") AUX_SOURCE_DIRECTORY 不会递归包含子目录,仅包含指定的dir目录 ADD_SUBDIRECTORY子模块的编译,可以将子文件夹中或者指定外部文件夹下CMakeLists.txt...模板一 一个独立的应用,应用模块之间是相互联系的,彼此难以分开,这样简单的将所有源文件放一起,头文件放一起,这个对于不是很复杂的应用是很快速的去开始构建和源文件修改操作: . ├── 3rdparty...在优雅的构建软件模板中,我们将版本信息放置于src/common/version.hpp文件中: 注:所有的文件路径都是相对项目根目录而言。...,比如test_logger.cpp或者更多的测试demo,tests/CMakeLists.txt会自动将tests目录下所有源文件逐个进行可执行文件生成构建。
有时候我们会有多个可执行文件,他们之间用到的某些功能是相同的,我们想把这些共用的功能做成一个库,方便大家一起共享 库中的函数可以被可执行文件调用,也可以被其他库文件调用 库文件又分为静态库文件和动态库文件...PUBLIC 的含义稍后会说明(CMake 中有很多这样的大写修饰符) 4.CMake中的子模块 复杂的工程中,我们需要划分子模块,通常一个库一个目录,比如: 这里我们把 hellolib 库的东西移到...hellolib 文件夹下了,里面的 CMakeLists.txt 定义了 hellolib 的生成规则 要在根目录使用他,可以用 CMake 的 add_subdirectory 添加子目录,子目录也包含一个...指定的路径会被视为与系统路径等价 6.多文件引用库的头文件处理 但是这样如果另一个 b.out 也需要用 hellolib 这个库,难道也得再指定一遍搜索路径吗?...表示当前路径,因为子目录里的路径是相对路径,类似还有 … 表示上一层目录 此外,如果不希望让引用 hellolib 的可执行文件自动添加这个路径,把 PUBLIC 改成 PRIVATE 即可,这就是他们的用途
虽然命令行脚本也能帮助编译链接,但是它的能力还太弱,它每次都会将所有文件重新编译,例如有几百个源文件,我仅仅只修改了其中一个源文件,那么重新编译时,这几百个源文件也都会重新编译,这样每次编译一下都会耗费大量时间...安装 进入cmake官网下载页[1] 下载zip包或安装器,安装后,将cmake的bin目录加入PATH环境变量中,命令行输入cmake --version检查环境是否配置成功 简单示例 以上面的代码为例...cmake -G "MinGW Makefiles" 要注意,以上命令直接在CMD命令行执行可能会报错,它需要一个sh环境,这里有两种解决办法 将sh.exe所在目录加入到环境变量中,它位于MinGW...使用给定的源文件,生成一个库(静态库或共享库) add_subdirectory添加一个子目录,该子目录也必须包含一个CMakeLists.txt文件 include_directories添加头文件路径...# 递归遍历当前目录下的所有.c .cpp后缀名的文件,并将结果列表保存到SRC_LIST变量中 FILE(GLOB_RECURSE SRC_LIST *.c *.cpp) # 打印 message (
所在的子目录中,使用上述方式可能会导致找不到头文件的错误。...使用 CMAKE_CURRENT_LIST_DIR 变量来代替 CMAKE_CURRENT_SOURCE_DIR 变量,能够确保无论在多级子目录中的哪个位置,都能正确获取到当前源代码目录的路径...编写CMakeLists.txt文件:在CMakeLists.txt文件中,使用CMake提供的语法和命令来描述项目的构建过程,例如定义变量、设置编译选项、添加源文件、链接库等。...add_subdirectory:用于添加子目录,指定子目录中的CMakeLists.txt文件。target_include_directories:用于设置包含目录。...它通过简洁的配置文件来描述项目的构建过程,提供了跨平台支持和丰富的功能,使得开发者能够更方便地管理和构建他们的项目。如果你正在寻找一个跨平台、易读、可扩展的构建工具,CMake是一个值得考虑的选择。
这是您运行cmake命令的目录 CMAKE_CURRENT_BINARY_DIR 您当前所在的build目录 PROJECT_BINARY_DIR 当前项目的build目录 源文件变量 创建包含源文件的变量可以使您更清楚地了解这些文件...注意 如前面的示例所述,我们将源文件直接传递给add_library调用,这是现代CMake的建议。...: 编译库时 编译链接库的任何其他目标时 scope的参数含义是: PRIVATE - 目录已添加到此目标的包含目录 INTERFACE - 该目录被添加到链接该库的任何目标的包含目录中。...PUBLIC - 如上所述,它包含在此库中以及链接到该库的所有目标。 对于public headers,通常最好将include文件夹与子目录进行 “命名间隔(namespaced)”。...您应该将测试分为反映被测代码结构的测试套件。当一个测试套件中的多个测试需要共享通用对象common objects和子例程subroutines时,可以将它们放入一个 test fixture 类。
CMake一个HelloWord-的语法介绍 PROJECT关键字 作用:可以用来指定工程的名字和支持的语言,默认支持所有语言 PROJECT (HELLO) 指定了工程的名字,并且支持所有语言—...ADD_EXECUTABLE关键字 作用:生成可执行文件 ADD_EXECUTABLE(hello ${SRC_LIST}) 生成的可执行文件名是hello,源文件读取变量SRC_LIST中的内容...二进制 将构建后的目标文件放入构建目录的 bin 子目录 将 doc 目录 的内容以及 COPYRIGHT/README 安装到/usr/share/doc/cmake/ 将目标文件放入构建目录的 bin...子目录 PS:tree命令在centos中没有,需要提前进行安装,安装命令:yum install tree 每个目录下都要有一个CMakeLists.txt说明 [root@localhost cmake...目录名以/结尾:将这个目录中的内容安装到目标路径。
领取专属 10元无门槛券
手把手带您无忧上云