首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

CMake递归地将一个目录的所有子目录中的所有源文件添加到可执行文件中吗?

CMake是一个跨平台的开源构建工具,用于管理软件构建过程。它可以递归地将一个目录的所有子目录中的所有源文件添加到可执行文件中,但需要通过编写CMakeLists.txt文件来指定构建规则。

在CMakeLists.txt文件中,可以使用add_executable命令来定义可执行文件,并通过指定源文件的路径来添加源文件。当指定一个目录作为参数时,CMake会自动递归地搜索该目录下的所有子目录,并将其中的源文件添加到可执行文件中。

以下是一个示例的CMakeLists.txt文件,展示了如何递归地添加一个目录及其子目录中的所有源文件:

代码语言:txt
复制
cmake_minimum_required(VERSION 3.0)
project(MyProject)

# 添加可执行文件
add_executable(MyExecutable)

# 递归地添加源文件
file(GLOB_RECURSE SOURCE_FILES "path/to/directory/*.cpp" "path/to/directory/*.c")
target_sources(MyExecutable PRIVATE ${SOURCE_FILES})

在上述示例中,add_executable命令定义了一个名为MyExecutable的可执行文件。file(GLOB_RECURSE ...)命令用于递归地搜索指定目录下的所有源文件,并将结果存储在变量SOURCE_FILES中。最后,target_sources命令将SOURCE_FILES中的源文件添加到MyExecutable可执行文件中。

需要注意的是,CMake并不会自动搜索所有可能的源文件类型,因此需要根据实际情况在file(GLOB_RECURSE ...)命令中指定源文件的扩展名或模式。

对于CMake的更多详细信息和用法,请参考腾讯云的CMake产品介绍页面:CMake产品介绍

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

万字总结编译利器CMake,从入门到项目实战演练

为了达到这个目的,我们首先需要一个程序来生成这样表。在MathFunctions这个子目录一个叫做MakeTable.cxx源文件就是用来干这个。...该库是我们自己实现用于计算数字平方根库。可执行文件可以使用此库,而不是使用编译器提供标准平方根函数。 在本教程,我们库放入名为MathFunctions子目录。...在MathFunctions子目录,提供了一个名为MakeTable.cxx源文件以生成表。 查看完文件后,我们可以看到该表是作为有效C++代码生成,并且输出文件名作为参数传入。...源文件需要编译成一个名称为 Demo 可执行文件。...子目录 CMakeLists.txt: # 查找当前目录所有源文件 # 并将名称保存到 DIR_LIB_SRCS 变量 aux_source_directory(.

1K00

学习了CC++,居然不了解Cmake这一利器

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 变量

11610

Cmake使用

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.

1.3K30

Linux CMake 快速使用(一)

平时直接使用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文件下 ? 可执行文件所在目录 ?

1.6K60

CMake常用命令一些整理

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添加到

1.5K10

CMake入门实战——多个源文件

多个源文件 同一目录,多个源文件 上面的例子只有单个源文件。现在假如把 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 目录源文件编译为静态链接库

1.8K30

CMAKE使用手记

指定项目的名称 指定需要 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(.

48320

cmake 简介2021-10-03

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 可执行文件

30920

CMake基础

有时候我们会有多个可执行文件,他们之间用到某些功能是相同,我们想把这些共用功能做成一个库,方便大家一起共享 库函数可以被可执行文件调用,也可以被其他库文件调用 库文件又分为静态库文件和动态库文件...PUBLIC 含义稍后会说明(CMake 中有很多这样大写修饰符) 4.CMake子模块 复杂工程,我们需要划分子模块,通常一个一个目录,比如: 这里我们把 hellolib 库东西移到...hellolib 文件夹下了,里面的 CMakeLists.txt 定义了 hellolib 生成规则 要在根目录使用他,可以用 CMake add_subdirectory 添加子目录子目录也包含一个...指定路径会被视为与系统路径等价 6.多文件引用库头文件处理 但是这样如果另一个 b.out 也需要用 hellolib 这个库,难道也得再指定一遍搜索路径?...表示当前路径,因为子目录路径是相对路径,类似还有 … 表示上一层目录 此外,如果不希望让引用 hellolib 可执行文件自动添加这个路径,把 PUBLIC 改成 PRIVATE 即可,这就是他们用途

1.9K20

CMake---优雅构建CC++软件项目实践(1)

将给定目录添加到编译器用于搜索包含文件(如头文件)目录,相对路径被解释为相对于当前源目录。...}") AUX_SOURCE_DIRECTORY 不会递归包含子目录,仅包含指定dir目录 ADD_SUBDIRECTORY子模块编译,可以子文件夹或者指定外部文件夹下CMakeLists.txt...模板一 一个独立应用,应用模块之间是相互联系,彼此难以分开,这样简单所有源文件放一起,头文件放一起,这个对于不是很复杂应用是很快速去开始构建和源文件修改操作: . ├── 3rdparty...在优雅构建软件模板,我们版本信息放置于src/common/version.hpp文件: 注:所有的文件路径都是相对项目根目录而言。...,比如test_logger.cpp或者更多测试demo,tests/CMakeLists.txt会自动tests目录所有源文件逐个进行可执行文件生成构建。

8.1K52

解决CMAKE_CURRENT_SOURCE_DIR

所在子目录,使用上述方式可能会导致找不到头文件错误。...使用 ​​CMAKE_CURRENT_LIST_DIR​​ 变量来代替 ​​CMAKE_CURRENT_SOURCE_DIR​​ 变量,能够确保无论在多级子目录哪个位置,都能正确获取到当前源代码目录路径...编写CMakeLists.txt文件:在CMakeLists.txt文件,使用CMake提供语法和命令来描述项目的构建过程,例如定义变量、设置编译选项、添加源文件、链接库等。...add_subdirectory:用于添加子目录,指定子目录CMakeLists.txt文件。target_include_directories:用于设置包含目录。...它通过简洁配置文件来描述项目的构建过程,提供了跨平台支持和丰富功能,使得开发者能够更方便管理和构建他们项目。如果你正在寻找一个跨平台、易读、可扩展构建工具,CMake一个值得考虑选择。

29130

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 类。

1.3K00

程序员C语言快速上手——工程篇(十三)

虽然命令行脚本也能帮助编译链接,但是它能力还太弱,它每次都会将所有文件重新编译,例如有几百个源文件,我仅仅只修改了其中一个源文件,那么重新编译时,这几百个源文件也都会重新编译,这样每次编译一下都会耗费大量时间...安装 进入cmake官网下载页[1] 下载zip包或安装器,安装后,cmakebin目录加入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 (

3K30

CMake学习笔记合集

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...目录名以/结尾:这个目录内容安装到目标路径。

2.2K20

CMake学习笔记

CMake一个HelloWord-语法介绍 PROJECT关键字 可以用来指定工程名字和支持语言,默认支持所有语言 PROJECT (HELLO) 指定了工程名字,并且支持所有语言—建议...ADD_EXECUTABLE关键字 生成可执行文件 ADD_EXECUTABLE(hello ${SRC_LIST}) 生成可执行文件名是hello,源文件读取变量SRC_LIST内容 也可以直接写...二进制 构建后目标文件放入构建目录 bin 子目录 doc 目录 内容以及 COPYRIGHT/README 安装到/usr/share/doc/cmake/ 目标文件放入构建目录 bin...目录名以/结尾:这个目录内容安装到目标路径 安装过程 cmake .. make make install 静态库和动态库构建 任务: 1,建立一个静态库和动态库,提供 HelloFunc 函数供其他程序编程使用...静态库在编译时会直接整合到目标程序,编译成功可执行文件可独立运行 动态库在编译时不会放到连接目标程序,即可执行文件无法单独运行。

2K20
领券