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

自定义命令中的CMake调用add_subdirectory

在自定义命令中使用CMake调用add_subdirectory函数的目的是将一个子目录添加到项目中,并将其作为一个独立的项目进行构建。add_subdirectory函数的语法如下:

代码语言:txt
复制
add_subdirectory(<subdirectory> [<binary_dir>] [EXCLUDE_FROM_ALL])

其中,<subdirectory>是要添加的子目录的路径,可以是相对路径或绝对路径。<binary_dir>是指定用于生成二进制文件的目录,如果省略,则默认为构建目录。EXCLUDE_FROM_ALL参数用于指定是否将该子目录的构建排除在整体构建过程之外。

使用add_subdirectory可以将一个子目录的CMakeLists.txt文件添加到主项目中,使其成为主项目的一部分。在子目录中,可以定义和配置自己的目标文件、库、可执行文件等。

使用add_subdirectory的优势是可以模块化地管理项目的各个部分,使项目结构更加清晰和可维护。通过将项目分割为多个子目录,可以独立地对每个子目录进行构建、测试和部署,提高了项目的灵活性和可扩展性。

add_subdirectory的应用场景包括但不限于以下情况:

  • 当项目由多个模块组成,每个模块都具有自己的构建配置时,可以将每个模块作为一个子目录,并使用add_subdirectory将其添加到主项目中。
  • 当项目的某个模块需要独立进行构建和测试时,可以将该模块作为一个子目录,并在主项目中使用add_subdirectory进行管理。
  • 当项目中存在公共库或功能模块时,可以将这些模块封装为独立的子目录,并在需要使用这些模块的地方使用add_subdirectory引入。

腾讯云提供了一系列与CMake相关的产品和服务,可以辅助开发人员进行项目构建和部署:

  • 腾讯云云原生应用平台:提供全面的云原生应用开发、运行和管理平台,包括容器化、微服务等相关技术。
  • 腾讯云代码托管服务:提供代码托管、版本控制等功能,可用于管理和共享项目代码。
  • 腾讯云构建服务:提供弹性、可扩展的持续集成和持续部署服务,可用于自动化构建和部署项目。
  • 腾讯云服务器less:提供按需执行的无服务器计算服务,可用于支持自定义命令的运行和调用。

以上是关于自定义命令中的CMake调用add_subdirectory的解释和相关推荐产品的介绍。如果还有其他问题,欢迎继续提问。

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

相关·内容

CMake 秘籍(四)

如何操作 我们将按照以下步骤在我们模板头文件中注册版本: 为了追踪代码版本,我们可以在CMakeLists.txt调用 CMake project命令时定义项目版本: cmake_minimum_required...( get_git_hash ALL DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/generated/version.hpp ) 自定义命令调用 CMake...git-hash.cmake脚本生成${TARGET_DIR}/generated/version.hpp。自定义目标添加到ALL目标,并依赖于自定义命令输出。...CMake 函数没有返回值。 还有更多 在宏嵌套函数调用和在函数嵌套宏调用是可能,但我们需要仔细考虑变量作用域。...在这种情况下,我们通过添加自定义消息(“调用内置include_guard”)来增强内置命令。这种模式为我们提供了一种重新定义自己或内置函数和宏机制。这在调试或记录目的时可能很有用。

22020

用Visual Studio Code和CLion进行EOS开发

然而,这是整个过程很小一部分。大多数时候,我们需要生成一些其他文件,这些文件将用于在区块链上部署合约,进行单元测试等等。这就是CMake有用地方。 CMake是用于控制软件编译过程命令行工具。...接下来是CMakeModules,它包含一些有用Cmake模块,这些自定义模块用于编译过程。 contracts是我们核心文件夹。这就是我们要放置智能合约地方。...每一个新智能合约都应该作为这个配置子目录来添加。重要是不要忘了这一步合约不会编译。CMake不知道。...幸运是,VS Code有一些很酷东西叫做Tasks。它帮助我们自动化每个命令,只需点击几下。 VS CodeTasks 首先,我们必须生成包含我们自定义命令tasks.json文件。...更多关于配置CLionCMake信息,你可以在CLion IDE官方文档中找到。写非常好!

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

    后面的紧接四个ADD_SUBDIRECTORY指令,是指CMake指令顺序进入四个路径,顺序执行几个路径CMakeLists.txt文件。 这里笔者认为可以将其理解成C++四个函数。.../IPCServerCMakeLists.txt文件。如果这些CMakeLists.txt文件也存在ADD_SUBDIRECTORY指令也同理。...主要被定义为两部分内容: contours_fun:笔者自定义基于轮廓处理函数; imageprocessing_fun:笔者自定义图像预处理函数; 文件内容如下: # CMake最低版本要求 CMAKE_MINIMUM_REQUIRED...生成图像客户端目标文件,是基于之前自定义函数部分imageprocessing_fun图像处理函数,而之前这些函数已经被处理为库文件,被存储在工程生成路径下lib路径,所以指令LINK_DIRECTORIES...后面TARGET_LINK_LIBRARIES命令便通过链接先前库文件来生成目标文件,该条命令主要有几部分组成: ncclient_image:生成目标文件名称 由于先前存在指令ADD_LIBRARY

    1.2K100

    CMake

    这里我们使用CMake。 在一个CMake工程,我们会使用cmake命令生成一个Makefile文件,然后,用make命令根据这个 makefile文件内容来编译整个工程。...为了方便,我们可以先将 math 目录里文件编译成静态库再由 main 函数调用。...自定义编译选项 CMake 允许为项目增加编译选项,从而可以根据用户环境和需求选择最合适编译方案。...例如,可以将 MathFunctions 库设为一个可选库,如果该选项为 ON ,就使用该库定义数学函数来进行运算。否则就调用标准库数学函数库。...会自动根据 CMakeLists 配置文件设置自动生成 config.h 文件 编译项目 现在编译一下这个项目,为了便于交互式选择该变量值,可以使用 ccmake 命令

    1.7K42

    CMake简易指南

    cmake 命令,通常写在 CMakeLists.txt / *.cmake 文件调用内置语法和函数都称之为 cmake 命令cmake-generator-expressions:生成器表达式,...pathA 定义,libB 依赖 libA 时无需再手动添加 include pathA,target 应当做到自给自足自定义目标在 cmake ,除了库和执行文件可以作为目标,一些自定义操作也可以作为目标...通过可以使用 add_custom_command / add_custom_target 命令来添加自定义操作。...POST_BUILD:链接成目标文件之后生成器表达式在 cmake ,除了常规命令行,如if(xxx),还支持一种特殊语法 生成器表达式,生成器表达式与常规命令不同,常规命令在 配置 阶段生效,而生成器表达式在...上文中自定义命令 add_custom_command 里 $ 就是经典使用场景,配置时我们并不确定具体生成文件路径,可以在执行阶段解析为实际变量,再例如:target_compile_options

    77950

    使用CEF(六)— 解读CEFcmake工程配置

    CMake本身无法构建任何应用,它生成不同构建工具所需要配置或某种输入,再让构建工具基于配置调用工具链,对代码进行构建。...对于使用Ninja,读者会看到都会调用ninja cefclient cefsimple,这个命令运行后,会编译democefclient和cefsimple两个项目,这里只是官方例子,在实际使用过程..._CEF_ROOT}/cmake路径,与之前cef_binary_xxx/CMakeList.txt追加该PATH目的不一样,这一次追加CMAKE_MODULE_PATH值核心目的是为下面调用include...定义: 也就是说,在本例add_subdirectory(${CEF_LIBCEF_DLL_WRAPPER_PATH} libcef_dll_wrapper)就是添加了子目录cef_binary_xxx...如果启用了USE_SANDBOX标识,则会使用自定义宏(也是在之前cef_macro.cmake定义)ADD_LOGICAL_TARGET进行特殊处理: if(USE_SANDBOX) #

    79520

    gcc编译命令_cmake 编译

    GCC命令提供了非常多命令选项,但并不是所有都要熟悉,初学时掌握几个常用就可以了,到后面再慢慢学习其它选项,免得因选项太多而打击了学习信心。 一....常用编译命令选项 假设源程序文件名为test.c。 1. 无选项编译链接 用法:#gcc test.c 作用:将test.c预处理、汇编、编译并链接形成可执行文件。...test.c //将test.c编译成test.o #gcc -o testfun.o test.o -o test //将testfun.o和test.o链接成test 以上两种方法相比较,第一方法编译时需要所有文件重新编译...在/usr/dev/mysql/lib目录下有链接时所需要库文件libmysqlclient.so和libmysqlclient.a,为了让GCC在链接时只用到静态链接库,可以使用下面的命令: gcc...–L /usr/dev/mysql/lib –static –lmysqlclient test.o –o test 静态库链接时搜索路径顺序: 1. ld会去找GCC命令参数-L 2.

    1.9K30

    自定义Clang命令,利用LLVM Pass实现对OC函数静态插桩

    但列举这些方案只能实现函数切片,也就是在函数调用前或者调用后进行Hook,但比如我们想在这函数逻辑插入桩函数(如下),常见hook思路就没办法实现了。...图片那么如何自定义Clang命令,利用llvm Pass实现对函数静态插桩,下面分为两部分,一部分是llvm Pass,另外一部分是自定义Clang编译参数。两者合起来实现这个功能。...编译过程图片这里“插桩”思路就是利用OC编译过程,使用自定义Pass(这里使用是transformation pass),来篡改IR文件。...自定义Clang命令如何让Clang识别到自定义命令和根据我们需要要加载对应代码呢,需要修改以下几处地方在llvm-project/clang/include/clang/Driver/Options.td...-> Debug -> Debug Workflow ->Always Show Disassemby 就能看到文章开头处,在汇编代码显示插入和调用桩函数。

    2.3K191

    CMake教程】(四)CMake 配置生成lib或者so库文件

    (1)系列教程介绍   上面几个教程我们程序都是生成可执行文件。但是我们在合作开发算法时候经常需要交付是一个模块,该模块提供特定算法功能,用于给整体项目进行调用。...安装cmake: sudo apt install cmake (3)设置设置我们程序输出为lib文件   配置输出库文件(lib和so)主要是通过函数add_subdirectory进行配置,使用STATIC...add_subdirectory(mathlib) # 列出mathlib库所有项目,并添加到外部库变量EXTRA_LIBS list(APPEND EXTRA_LIBS mathlib...(mathlib mathlib.cpp) 为了将cmake变量自动传递到程序,在TutorialConfig.h.in添加#cmakedefine USE_MYMATH命令用于在cmake中生成...:在cmake定义USE_MYMATH时候在程序才会编译该命令块。

    11.9K30

    OpenHarmony开源三方库cmake在IDE上直接引用问题

    前言DevEco Studionative工程C/C++部分当前只支持cmake脚本编译,工程目录结构如下图所示在工程引用第三方库有如下三种方式,一、find_package模式通过find_package...,可以在指定目录下去搜索已安装库(三方库构建完后执行install,会生成xxx-config.cmake之类文件在安装目录下),如果可以找到对应库,就可以获取头文件路径以及库路径二、add_subdirectory...DevEco Studionative工程C/C++部分是使用cmake脚本来构建,开源社区上有很多C/C++三方库也是使用cmake来编译构建,这些三方库我们是否可以直接采用add_subdirectory...上直接使用需要配置搜索路径和提前将依赖库都构建并安装完毕或者在顶层CMakeLists.txt中使用execute_process来调用shell命令,先把依赖库编译并安装完成三方库引用建议在native...工程,三方库使用建议都采用target_link_libraries模式来引用写在最后如果你觉得这篇内容对你还蛮有帮助,我想邀请你帮我三个小忙:点赞,转发,有你们 『点赞和评论』,才是我创造动力

    8010

    Android NDK开发扫盲及最新CMake编译使用

    ndk-build 文件是 Android NDK r4 引入一个 shell 脚本。其用途是调用正确 NDK 构建脚本。其实最终还是会去调用 NDK 自己编译工具。...而 CMake 则是一个跨平台编译工具,它并不会直接编译出对象,而是根据自定义语言规则(CMakeLists.txt)生成 对应 makefile 或 project 文件,然后再调用底层编译。...由于 CMake 命令集成在了 gradle - externalNativeBuild ,所以在 gradle 中有2个地方配置 CMake。...${lib_build_DIR}/gperf) 外层 CMakeLists 里面核心就是 add_subdirectory,查询CMake 官方文档 可以知道这条命令作用是为构建添加一个子路径。...这个命令设置了 gmath ARCHIVE_OUTPUT_DIRECTORY 属性。也就是改变了输出路径。 add_custom_command 命令自定义命令

    2.3K30

    第6节:cmake语法介绍

    文章目录 cmake CMake变量 常见变量名 注释 变量 bool 变量 列表 cmake命令 操作符 条件命令 循环命令 遍历 自定义命令(函数) 自定义命令 作用域 cmake cmake是一个开源构建工具...,可通过add_subdirectory()命令把下一层源码目录构建规则添加进去 Cmake源文件中国所有有效语句都是命令 常见变量名 PROJECT_NAME project 命令项目名...命令cmake,条件语句,循环语句,函数或者宏,都是命令。...自定义命令 宏和函数基本上是一样,只是说函数命令有自己作用域,宏命令作用域和调用作用域一样。 macro( [arg1 [arg2 [arg3 ...]]])...目录层:在当前目录CMakeLists.txt定义,及在该文件包含进来(通过include或者macro引进)其他cmake源文件定义变量属于目录层这一级作用域。

    63510

    cmake 学习笔记(一)

    (hello ${SRC_LIST}) 然后,建立一个任意目录(比如本目录下创建一个build子目录),在该build目录下调用cmake 注意:为了简单起见,我们从一开始就采用cmake out-of-source...注意:CMakeList.txt 文件命令名字是不区分大小写,而参数和变量是大小写相关cmake命令 cmake 命令后跟一个路径(..)...文件 project(HELLO) add_subdirectory(src) add_subdirectory(libhello) src CMakeList.txt 文件 include_directories...libhello lib) 不是build目录默认和源代码结构一样么,我们可以指定其对应目录在build名字。...试着写一下 如果不考虑windows下,这个例子应该是很简单,只需要在上个例子 libhello/CMakeList.txt 文件add_library命令中加入一个SHARED参数: add_library

    52510

    CMake入门实战——自定义编译选项

    自定义编译选项 CMake 允许为项目增加编译选项,从而可以根据用户环境和需求选择最合适编译方案。...例如,可以将 MathFunctions 库设为一个可选库,如果该选项为 ON ,就使用该库定义数学函数来进行运算。否则就调用标准库数学函数库。...修改 CMakeLists 文件 我们要做第一步是在根目录 CMakeLists.txt 文件添加该选项: # CMake 最低版本号要求 cmake_minimum_required (VERSION...第9行 configure_file 命令用于加入一个配置头文件 config.h ,这个文件由 CMake 从 config.h.in 生成,通过这样机制,将可以通过预定义一些参数和变量来控制代码生成...编译项目 现在编译一下这个项目,为了便于交互式选择该变量值,可以使用 ccmake . 命令 ?

    2.1K10

    CMake简介及使用实例

    一个 CMakeLists.txt文件主要由 CMake命令组成。 (1)在 CMake,注释由 #字符开始到此行结束。 (2)命令名不区分大小写,参数需区分大小写。...这里目标必须是add_executable、add_library、add_custom_target命令创建目标 add_subdirectory命令 命令语法:add_subdirectory(...我们可以这样指定构建类型: $ CMake -DCMAKE_BUILD_TYPE=Debug 这里 CMAKE_BUILD_TYPE值为上述 4种构建类型一种。...使用了 add_subdirectory指定了需要进行构建子目录,并且使用了target_link_libraries命令,表示 Main可执行文件需要链接 Lib 库。...我们执行 CMake .命令,首先会执行 HelloWorld目录下 CMakeLists.txt命令,当执行到 add_subdirectory(Lib)命令时候会进入 Lib子目录并执行其中

    2.5K21
    领券