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

CMake将CMakeLists.txt中的target_sources拆分为不同的目标

CMake是一个跨平台的开源构建工具,用于管理软件构建过程。它使用CMakeLists.txt文件来描述项目的构建规则和依赖关系。

在CMakeLists.txt文件中,target_sources命令用于将源文件添加到特定的目标中。它可以将源文件分配给一个或多个目标,以便在构建过程中编译和链接这些文件。

将target_sources拆分为不同的目标可以带来以下优势:

  1. 模块化:通过将源文件分配给不同的目标,可以将项目分解为更小的模块,使得代码更易于管理和维护。
  2. 可重用性:不同的目标可以共享相同的源文件,从而提高代码的可重用性。当需要在多个目标中使用相同的源文件时,只需将其添加到相应的目标即可。
  3. 编译优化:将源文件分配给不同的目标可以使得编译过程更加高效。当只有特定目标需要某些源文件时,只需将这些文件添加到相应的目标,避免了不必要的编译。
  4. 构建速度:通过将源文件分配给不同的目标,可以并行编译这些目标,从而提高构建速度。

应用场景:

  • 在一个项目中,可能存在多个目标,如可执行文件、静态库、动态库等。通过将源文件分配给不同的目标,可以实现对不同类型目标的构建和管理。
  • 当项目需要支持不同的平台或配置时,可以使用target_sources命令将平台或配置特定的源文件添加到相应的目标中。

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云开发者工具 CMake:https://cloud.tencent.com/product/cmake
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

CMake 秘籍(四)

本食谱目标与前一个相似,但起点不同;我们计划是从文件读取版本信息,而不是在CMakeLists.txt内部设置它。...项目通常从一个CMakeLists.txt文件开始,但随着时间推移,这个文件会增长,在本例,我们演示一种CMakeLists.txt分为较小单元方法。...CMakeLists.txt分为可以在主CMakeLists.txt或其他模块包含模块有几个动机: 主要CMakeLists.txt更容易阅读。...在下一个食谱,我们展示一种替代方法,其中我们不使用add_subdirectory,而是使用模块包含来组装不同CMakeLists.txt文件,这允许我们链接到当前目录之外定义目标。.... $ dot -T png example.dot -o example.png 生成图表显示不同目录目标之间依赖关系: 在本书中,我们一直在进行源外构建,以保持源代码树和构建树分离。

24920

CMake 添加外部源文件

CMake 添加外部源文件项目文件树CPP11ThreadLearn ├── CMakeLists.txt------------顶级CMake文件 ├── CPP11ThreadLearn------....h .cpp不编译成静态库或动态库项目中 #include"tools.h" 即可以使用,像是在同一目录下效果较好维护性 不要在每个 CMakeLists.txt 添加大量代码解决方案:思路:通过...CMake 配置文件加入头文件和源文件第一步:定义函数# 顶级CMake文件添加函数# 添加外部源码库(单层文件结构)function(add_path_to_target target path)...${path}) target_sources(${target} PRIVATE ${var}) endfunction() 第二步:使用函数# 在项目 1 or 2 下 CMakeLists.txt...中使用该函数# CPP11ThreadPool/CMakeLists.txt 内容cmake_minimum_required (VERSION 3.8)# 源代码添加到此项目的可执行文件。

8110
  • CMake 秘籍(八)

    CMake 在本书最后一章,我们结合前面章节讨论多个不同构建块,并将其应用于一个实际项目。...我们目标将是逐步展示如何一个非平凡项目移植到 CMake,并讨论这样过程步骤。...在原始布局,文件在 src 文件夹下生成。我们不喜欢这种方法,在我们示例 CMake 移植中将采取不同做法:这些文件将在构建目录中生成。...如何组织文件 我们收集生成这些文件函数在src/autogenerate.cmake,包含此模块,并在定义可执行目标之前在src/CMakeLists.txt调用这些函数: # generate...一种强制分离变量范围方法是大型项目划分为 CMake 项目,这些项目使用超级构建模式(参见第八章,超级构建模式)。考虑大型CMakeLists.txt文件拆分为较小模块。

    18810

    关于CMake不同变量用法与总结

    CMake变量CMake变量类型有多种:通过set设置普通变量和缓存变量、环境变量、数组变量等等,由于CMake在生成过程中会加载缓存关系,因此用法不一样。...variable)相当于编程脚本内部变量,类似于脚本文件局部变量,这种变量不能跨越CMakeLists.txt文档。...和编程语言中局部变量用法类似,这个变量会屏蔽CMake缓存同名变量,(类似局部变量屏蔽全局变量)。但是这条语句不会改变缓存var变量。...缓存变量也可以设置只在本文件内生效,STRING类型改为INTERNAL即可。...给定值option实际上只是“初始值”(在第一个配置步骤中一次传送到缓存),之后将由用户通过CMakeGUI或者命令行进行更改总结正常使用时候,如果有多层CMakeLists.txt,需要跨文本变量

    32200

    CMakeCMake 引入 ( Android NDK 构建脚本 | CMake 命令手册 )

    : ${CMAKE_SOURCE_DIR}, ANDROID_ABI : ${ANDROID_ABI}") # 到预设目录查找 log 库 , 找到路径赋值给 log-lib # 这个路径是...NDK ndk-bundle\platforms\android-29\arch-arm\usr\lib\liblog.so # 不同 Android 版本号 和 CPU 架构 需要到对应目录查找...| 引入静态库 | 指定静态库路径 | 链接动态库 ) 复制来 ; 三、CMake 命令手册 ---- CMake 命令分为三种 , 脚本命令 , 工程命令 , CTest 命令 ; 1、CMake...try_compile try_run 在 Android Studio CMake 构建脚本 CMakeLists.txt 中使用到所有 CMake 命令都来自上述脚本命令和工程命令 , 如...add_library , find_library , target_link_libraries 等 ; Android Studio CMakeLists.txt 构建脚本中常用命令 :

    3.8K01

    CMake 秘籍(六)

    让我们首先看一下src子目录CMakeLists.txt文件,所有额外工作实际上都在这里进行。我们根据上一节文件来突出显示更改: 我们声明了我们SHARED库目标及其消息库源文件。...当然,不同编译器将有不同选项可用,直接在我们CMakeLists.txt手动设置这些将不是跨平台。...这就是我们在熟悉 CMake 项目使用方案中提到打包时间,显示了项目的各个阶段: 在本章,我们探讨不同打包策略。我们首先讨论使用 CMake 家族工具 CPack 进行打包。...平台原生二进制安装程序:CPack 能够生成多种不同格式二进制安装程序,因此您可以软件分发目标定位到许多不同平台。...二进制归档文件 在创建二进制归档文件时,CPack 根据我们CMakeCPack.cmake文件描述安装说明,目标的内容打包。

    36700

    zephyr笔记 2.1 应用程序开发基础

    基础介绍 1.进入应用程序目录 /app. 2.输入如下命令,将会按照 应用程序 CMakeLists.txt 文件设置,编译出应用程序 zephyr.elf 镜像。...-GNinja .. ninja 如果需要,可以为不同硬件板子生成项目文件,通过定义环境变量 BOARD。...CMake 编译分为两步,第一步称作 配置,配置期间,CMakeLists.txt 编译脚本会执行。配置结束后,CMake 便有了内部模型,可以生成针对主机编译脚本。...target_sources(app PRIVATE src/main.c) 在上面的 CMakeLists.txt ,已存在 library target 名为 app,为其配置包含源码文件 src...应用程序 CMakeLists.txt 每个应用程序都必须包含 CMakeLists.txt,这个文件是编译系统入口。最后 zephyr.elf 镜像既包含应用程序也包含内核库。

    1.8K21

    CMake 秘籍(二)

    ;其他操作系统产生不同输出。...如果您使用不同编译器供应商,那么此示例代码提供不同问候。 在前面的示例和之前配方中CMakeLists.txt文件if语句似乎是重复,作为程序员,我们不喜欢重复自己。...它将仅使用 CMake,完全摆脱预处理器,代价是每个情况都有一个不同源文件,然后使用target_sources CMake 命令将其设置为可执行目标arch-dependent源文件: add_executable...C_DSCAL和C_DGESV是 BLAS 和 LAPACK 库接口,分别负责名称修饰,以便从不同编程语言调用这些函数。这是在以下接口文件与我们进一步讨论 CMake 模块结合完成。...CMakeLists.txt与之前配方中使用不同之处在于使用了FindZeroMQ.cmake模块。

    58720

    CMake基础

    四、构建系统构建系统CMake 为了解决 make 以上问题,跨平台 CMake 应运而生: 只需要写一份 CMakeLists.txt,他就能够在调用时生成当前系统所支持构建系统 CMake...可以自动检测源文件和头文件之间依赖关系,导出到 Makefile 里 CMake 具有相对高级语法,内置函数能够处理 configure,install 等常见需求 不同编译器有不同 flag...比如 OpenMP,只需要在 CMakeLists.txt 中指明 target_link_libraries(a.out OpenMP::OpenMP_CXX) 即可 五、CMake使用 1.CMake...有时候我们会有多个可执行文件,他们之间用到某些功能是相同,我们想把这些共用功能做成一个库,方便大家一起共享 库函数可以被可执行文件调用,也可以被其他库文件调用 库文件又分为静态库文件和动态库文件...PUBLIC 含义稍后会说明(CMake 中有很多这样大写修饰符) 4.CMake子模块 复杂工程,我们需要划分子模块,通常一个库一个目录,比如: 这里我们把 hellolib 库东西移到

    1.9K20

    CMake 秘籍(三)

    在本章,我们演示如何测试集成到 CMake 构建结构,使用流行测试库和框架,并牢记以下目标: 让用户、开发者和持续集成服务轻松运行测试套件。...在本食谱,我们演示如何使用 CMake 和 Google Test 框架实现单元测试。与之前食谱不同,Google Test 框架不仅仅是一个头文件;它是一个包含多个需要构建和链接文件库。...使用 CMake,我们不仅能够在不同平台上生成构建系统,还能够执行这些操作,而不需要复杂逻辑来抽象不同操作系统。本节展示如何以可移植方式提取先前下载存档。...这样,自定义目标可以在与其依赖项不同目录中指定,这在为项目设计模块化 CMake 基础设施时非常有用。 准备工作 对于这个配方,我们重用前一个配方源代码示例。然而,我们稍微修改源文件布局。...因此,可以在子目录引入自定义目标,并且仍然能够在顶层CMakeLists.txt引用它。

    58820

    CMake 秘籍(七)

    这添加了一个新docs目标,该目标调用 Doxygen 来构建我们文档: add_doxygen_doc( BUILD_DIR ${CMAKE_CURRENT_BINARY_DIR}/...它是如何工作 由于我们在与目标环境(Windows)不同宿主环境(在这种情况下,GNU/Linux 或 macOS)上配置和构建代码,我们需要向 CMake 提供有关目标环境信息,我们已经在toolchain.cmake...└── test_short.cpp 如何做到这一点 现在,我们描述如何配置、构建、测试,最后,将我们示例项目的测试结果提交到仪表板: 源目标在src/CMakeLists.txt定义,如下所示:...让我们看看如何做到这一点: 有问题库在src/CMakeLists.txt定义: add_library(buggy "") target_sources(buggy PRIVATE...在您例子,您可能会观察到不同结果,这取决于您操作系统。

    16100

    如何对 Neuron 源码进行交叉编译

    开源社区用户有时会有使用 Neuron 源码在当前编译平台下编译能够运行在体系结构不同另一种目标平台上,即进行交叉编译需求。在这一过程可能会遇到由于没有安装好依赖库等原因导致编译错误。...cd neuron$ git submodule update --init$ mkdir build && cd build什么是交叉编译交叉编译,可以理解为在当前编译平台下,编译出能够运行在体系结构不同另一种目标平台上可执行程序过程...交叉编译链重点在于交叉编译器,使用不同平台编译器用来生成可在该平台运行可执行程序。所有语句都写在跨平台编译工具 CMake 所依赖规则文件 CMakeLists.txt ,用于构建整个工程。...target_sources(neuron PRIVATE ${NEURON_SOURCES}) # 头文件库路径添加到 neuron target_include_directories(neuron...用户可以根据本文,自行编译出所需架构可执行文件,从而更好地 Neuron 运行在不同架构平台上,实现相应业务目标

    1.2K50

    解决CMAKE_CURRENT_SOURCE_DIR

    本文介绍一种解决 ​​CMAKE_CURRENT_SOURCE_DIR​​ 变量无法正确解析方法。...跨平台支持:CMake可以生成适用于多种操作系统和编译器构建脚本。这意味着你可以使用相同CMake配置文件在不同平台上构建你项目。...你可以项目划分为多个模块,并为每个模块编写单独CMakeLists.txt文件,再通过顶层CMakeLists.txt文件来组合它们。...编写CMakeLists.txt文件:在CMakeLists.txt文件,使用CMake提供语法和命令来描述项目的构建过程,例如定义变量、设置编译选项、添加源文件、链接库等。...以上只是一些常用命令,CMake提供了很多其他命令和特性,用于处理更复杂构建需求。CMake是一个强大而灵活构建工具,适用于各种规模项目和不同平台。

    43830

    xmake vs cmake对比分析

    当初我做xmake目的,也并不是为了完全替代cmake,这没啥意义,只是觉得cmake语法和易用性满足不了我,我还是更喜欢更简单直观方式去描述和维护项目,在不同平台下提供近乎一致使用体验。...()是非常灵活强大,不仅可以支持各种不同类型源文件添加,还可以在添加同时排除一些指定文件。...cmake . cmake --build . 编译指定平台 xmake xmake可以以近乎一致方式快速切换不同平台和架构来编译。...install cmake cmake -P cmake_install.cmake 运行目标 xmake 大部分情况下,xmake不需要写自定义脚本就可以直接加载运行编译生成目标程序。...xmake run cmake cmake我没找到可以快速运行指定目标程序方式,但是应该可以通过写一个自定义脚本去加载运行它。

    2K20

    面向 C++ 现代 CMake 教程(二)

    图 3.4 – CMake 如何列表文件合并到一个项目中 在图 3.4,每个框代表了一个位于特定目录CMakeLists.txt文件列表,而草体字标签代表了每个文件执行动作(从上到下)。...这些机制允许我们避免使用可能不易移植或在不同环境命名不同平台特定 shell 命令。 对于性能关键应用程序,了解目标平台所有特性(例如,指令集、CPU 核心数等)很有用。...在 C++不同架构意味着一些基本数据类型(int和long)和指针有不同位宽。CMake 利用指针大小来收集目标机器信息。...它是一个生成表达式,评估目标二进制文件完整路径。这种机制在许多目标属性上下文中很有用。 理解生成表达式 CMake 解决方案构建分为三个阶段——配置、生成和运行构建工具。...我们可以使用target_sources()命令文件追加到先前创建目标: chapter05/01-sources/CMakeLists.txt add_executable(main main.cpp

    56200

    CMake简易指南

    运行大致分两到三步,下述样例属于cmake 控制台命令:配置:输入源文件目录,指定目标编译系统,添加编译选项,生成目标编译系统编译:输入目标编译系统,执行编译安装(可选):编译产物安装到指定位置(...CMakeLists.txt开始加载,遇到第一个project(xxx)时开始检查编译环境编译器,执行完所有代码后全局变量保存至CMakeCache.txt文件,再次执行配置时不会再修改全局变量,...target产物也在该缓存文件夹平台差分跨平台项目中通常会遇到不同平台参与编译头文件不一样,或者编译选项不同,在 cmake 里有一些描述平台系统变量:CMAKE_SYSTEM_NAME:描述目标平台名称...与 CMAKE_HOST_SYSTEM_NAME 是不同,正因为编译环境与运行环境不同,所以才叫 交叉编译变量以及内置变量为了便于阅读和维护,通常会使用变量来保存一些内容,cmake 变量分为常规变量...POST_BUILD:链接成目标文件之后生成器表达式在 cmake ,除了常规命令行,如if(xxx),还支持一种特殊语法 生成器表达式,生成器表达式与常规命令不同,常规命令在 配置 阶段生效,而生成器表达式在

    80750

    CMake学习笔记(三)——以笔者Robosub竞赛为例

    注: 关于语法总结,笔者前面的文章《CMake学习笔记(二)——CMake语法》,也对CMake语法做了较为系统总结。 3....此处两行SET代码是指这两个路径设置为PROJECT_BINARY_DIR(即执行cmake指令路径)下bin, lib路径。...后面的紧接四个ADD_SUBDIRECTORY指令,是指CMake指令顺序进入四个路径,顺序执行几个路径CMakeLists.txt文件。 这里笔者认为可以将其理解成C++四个函数。...(${PROJECT_BINARY_DIR}/lib)就是库文件路径包含在工程,以便后面库文件链接。...服务器类只有一个,但依照完成不同功能模块,被笔者分为五部分: ncserver_link:服务器端socket网络通信部分类函数源码 ncserver_dataproc:服务器端解算获得数据部分类函数源码

    1.2K100

    【C++】基础:代码编译与构建工具介绍

    知识介绍 C++ 编译与构建工具主要用于 C++ 源代码转换为可执行程序。它们可以分为以下几类: 1.编译器: C++ 源代码转换为机器代码。...Visual Studio:微软开发编译器,支持 Windows 平台。 2.链接器: 编译后目标文件链接在一起,形成可执行程序。...如果要自己编译很多源文件时候就需要cmake工具,可以更加方便地生成makefile文件给make用。cmake还可以跨平台生成对应平台可用makefile,无需自己根据每个平台不同特性修改。...同样在开源工程很常见,对源码编译通常是: mkdir build && cd build cmake .. make make install CMake通过CMakeLists.txt文件来描述项目的构建过程...CMake可以生成Makefile或Visual Studio项目文件等,使开发人员可以在不同平台和编译器上使用相同配置文件进行构建。

    19910
    领券