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

如何在cmake中定义从ExternalProject_add构建的目标派生的变量?

在CMake中,可以使用ExternalProject_Add命令来定义从ExternalProject_add构建的目标派生的变量。ExternalProject_Add命令用于将外部项目添加到CMake构建中,并可以定义一些变量来控制外部项目的构建过程。

要在cmake中定义从ExternalProject_add构建的目标派生的变量,可以使用ExternalProject_Get_Property命令来获取外部项目的属性,并将其赋值给新的变量。以下是一个示例:

代码语言:txt
复制
# 添加外部项目
ExternalProject_Add(MyExternalProject
    SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/external_project
    BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/external_project
    INSTALL_DIR ${CMAKE_CURRENT_BINARY_DIR}/external_project_install
    # 其他配置参数
)

# 获取外部项目的属性
ExternalProject_Get_Property(MyExternalProject INSTALL_DIR)
set(MyExternalProjectInstallDir ${INSTALL_DIR})

# 使用派生的变量
add_executable(MyApp main.cpp)
target_include_directories(MyApp PRIVATE ${MyExternalProjectInstallDir}/include)
target_link_directories(MyApp PRIVATE ${MyExternalProjectInstallDir}/lib)
target_link_libraries(MyApp PRIVATE my_external_library)

在上面的示例中,我们首先使用ExternalProject_Add命令添加了一个名为MyExternalProject的外部项目。然后,使用ExternalProject_Get_Property命令获取了该外部项目的INSTALL_DIR属性,并将其赋值给新的变量MyExternalProjectInstallDir。最后,我们可以在CMakeLists.txt中使用这个派生的变量来设置目标的包含目录、链接目录和链接库。

请注意,这只是一个示例,实际的用法可能因项目的具体需求而有所不同。另外,关于腾讯云相关产品和产品介绍链接地址,由于要求不能提及具体品牌商,所以无法提供相关链接。

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

相关·内容

CMake 秘籍(五)

它允许您在任何外部项目中定义步骤,例如构建和测试步骤,作为单独的目标。这意味着可以从完整的外部项目中单独触发这些步骤,并允许对项目内的复杂依赖关系进行精细控制。...为了实现这一目标,我们在根CMakeLists.txt中的ExternalProject_Add中传递两个额外的CMAKE_CACHE_ARGS: CMAKE_INCLUDE_PATH:CMake 查找...显然,CMake 能够执行以下操作: 确定使用哪个编译器从列出的源文件获取目标文件。 选择适当的链接器来从这些目标文件构建库(或可执行文件)。 CMake 如何确定使用哪个编译器?...我们从第 3 个配方,构建和链接共享和静态库,在第一章,从简单可执行文件到库中已经知道,CMake 接受以下选项作为add_library的第二个有效参数: STATIC,用于创建静态库;即,用于链接其他目标...与前一个示例相比,我们将展示如何在配置时获取 pybind11 依赖项,并使用我们在第四章,创建和运行测试,示例 3,定义单元测试并与 Google Test 链接中遇到的 FetchContent 方法构建我们的项目

73120

如何在Bash中遍历由变量定义的数字范围

问: 当范围由变量给出时,如何在Bash中遍历这一范围内的数字?...我知道我可以这样做(在 Bash 文档中称为“序列表达式”): for i in {1..5}; do echo $i; done 它会输出: 1 2 3 4 5 然而,我该如何用变量替换范围的任意一个端点呢...$END}; do echo $i; done 这会输出: {1..5} 答: 提问者代码不起作用的原因是花括号扩展在任何其他扩展之前执行,且其他扩展中具有特殊含义的任何字符都会在结果中保留下来。...换句话说,花括号扩展只是简单地基于文本的替换,它不会根据周围的语法环境或者花括号内部的文本进行复杂的分析或解析。这种方式确保了扩展的过程快速且不依赖于特定的语境。...如何将一个大的文本文件拆分为行数相等的小文件 在bash中:-(冒号破折号)的用法 在Bash中如何从字符串中删除固定的前缀/后缀

22910
  • 如何在Python中从0到1构建自己的神经网络

    神经网络训练 一个简单的两层神经网络的输出ŷ : image.png 你可能会注意到,在上面的方程中,权重W和偏差b是唯一影响输出ŷ的变量。 当然,权重和偏差的正确值决定了预测的强度。...从输入数据中微调权重和偏差的过程称为训练神经网络。 训练过程的每一次迭代由以下步骤组成: · 计算预测输出ŷ,被称为前馈 · 更新权重和偏差,称为反向传播 下面的顺序图说明了这个过程。...image.png 也就是说,平方和误差只是每个预测值与实际值之间的差额之和。差是平方的,所以我们测量了差的绝对值。 我们在训练的目标是找到最好的一组权重和偏差,以尽量减少损失函数。...image.png 让我们看一下从神经网络经过1500次迭代的最后的预测(输出)。 image.png 我们做到了!我们的前馈和反向传播算法成功地训练了神经网络,预测结果收敛于真值。...虽然像TensorFlow和Keras这样的深度学习库使得在不完全了解神经网络内部工作原理的情况下很容易构建深网,但我发现对神经网络有更深入的理解对于未来成为优秀的数据科学家是非常重要的。

    1.8K00

    CMake简易指南

    :用于指定交叉编译工具链,一般用于非本地平台编译,如 Android,ARM 平台编译等-DKey=Value:用于配置CMakeLists.txt或者工具链中的option选项等cmake 执行配置时从指定路径下的...中的target产物也在该缓存文件夹平台差分跨平台项目中通常会遇到不同平台参与编译的头文件不一样,或者编译选项不同,在 cmake 里有一些描述平台的系统变量:CMAKE_SYSTEM_NAME:描述目标平台名称...缓存文件中全局可用,如:# 常规变量# set( ......cmake 中内置很多系统变量,用于查询或修改系统设置,完整文档参考 cmake-variables,除了上述 平台差分中提到的四个变量,常用的变量还有:CMAKE_PROJECT_NAME:顶层项目名称...pathA 的定义,libB 依赖 libA 时无需再手动添加 include pathA,target 应当做到自给自足自定义目标在 cmake 中,除了库和执行文件可以作为目标,一些自定义操作也可以作为目标

    87050

    面向 C++ 的现代 CMake 教程(三)

    构建正确链接的可执行文件严重依赖于有效的配置(以及关注如位置无关代码(PIC)这样的微小细节。 我们将学习链接过程中的另一个麻烦——一定义规则(ODR)。我们需要正好得到定义的数量。...在下一章中,我们将学习如何在 CMake 中管理依赖关系。...它们在构建和控制代码质量的过程中也起着重要的作用——无论是特殊编译器如Protobuf,还是测试框架如GTest。...如果依赖项相对较小且易于构建,这种方法是合适的。 对于一些非常大的库(如 Qt),从源代码构建会花费大量时间。...既然我们已经知道如何在一个适当的目标中结构一个可测试的项目,那么让我们将重点转移到测试框架本身。我们不想手动将每个测试用例添加到我们的列表文件中,对吧?

    67000

    CMake 秘籍(三)

    而ExternalProject_Add()在构建时下载(如第八章,超级构建模式所示),FetchContent模块使内容立即可用,以便主项目和获取的外部项目(在本例中为 Google Test)可以在...还有更多 我们已经初步了解了FetchContent及其构建时的表亲ExternalProject_Add,我们将在第八章,超级构建模式中重新审视这些命令。...我们从第一章,从简单可执行文件到库中的第三部分,构建和链接静态和共享库的讨论中回忆起,IMPORTED库是 CMake 提供的伪目标,用于表示预先存在的依赖关系及其使用要求。...我们将学习如何在配置时间和构建时间执行自定义操作。...所有try_compile命令都将运行,并且它们的执行目录和文件将被清理。 从 CMake 缓存中删除保存检查结果的变量。缓存保存在CMakeCache.txt文件中。

    60220

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

    主要被定义为两部分内容: contours_fun:笔者自定义的基于轮廓处理的函数; imageprocessing_fun:笔者自定义的图像预处理函数; 文件内容如下: # CMake最低版本要求 CMAKE_MINIMUM_REQUIRED...}:此处为生成库文件的源码路径,该变量在前面已经被定义。...生成图像客户端目标文件,是基于之前自定义函数部分中的imageprocessing_fun的图像处理函数的,而之前这些函数已经被处理为库文件,被存储在工程生成路径下的lib路径中,所以指令LINK_DIRECTORIES...该变量是在OpenCV安装地址下的OpenCVConfig.cmake(笔者的路径是/usr/local/share/OpenCV/OpenCVConfig.cmake)中通过遍历而得到的。.../IPCImageClient/ncclient_image_main.cpp)便以源码文件ncclient_image_main.cpp,以及变量LIB_IMAGE中包含的库文件为基础,生成了目标可执行文件

    1.3K100

    【C++】基础:C++环境配置与基础语法

    make make构建用到的时makefile文件。makefile用于描述软件项目中的源代码文件如何编译和链接成可执行文件、库文件或其他目标文件,提供了一种便捷且灵活的方式来管理和构建项目。...CMake 是一个跨平台的开源构建工具,用于自动化地生成与平台特定编译器和构建系统无关的构建脚本和配置文件。...标识符和关键字 标识符是用来标识变量、函数、类、模块或任何其他用户需自定义项目的名称,以字母或下划线开始,不能有标点符号(如value setValue ClassExample)。...C++中的关键字不能用于用户自定义的标识符。...此外,可以用typedef为一个已有的类型取一个新的名字,即typedef type newname,如typedef int int32。 enum是一种派生数据类型,是用户定义的一系列常量集合。

    18810

    解决问题Unknown CMake command add_compile_definitions

    CMake使用CMakeLists.txt文件描述项目的构建规则,并根据规则生成相应的构建文件(如Makefile或Visual Studio项目文件)。...你可以根据你的实际需求来定义所需的宏。 这样,当我们使用CMake构建项目时,预处理宏DEBUG_MODE将被添加到编译选项中,从而影响代码的编译。...该命令在 CMake 3.12 版本中引入,用于简化在 CMakeLists.txt 中添加预处理宏定义的过程。...是预处理宏的名称,可以添加多个宏。 在使用这个命令时,CMake 会根据当前构建配置在编译器的命令行中添加预处理宏定义。...根据构建配置定义不同的预处理宏,例如 add_compile_definitions(${MY_BUILD_FLAG}),其中 MY_BUILD_FLAG 是根据构建选项动态设置的变量。

    3K10

    面向 C++ 的现代 CMake 教程(四)

    当然,我们不想每次修改后都手动执行这个命令;CMake 应该在构建过程中处理这个问题。我们已经知道如何在系统中找到clang-format(我们之前需要手动安装它)。.../ProjectATargets.cmake) 执行此操作将为A的所有目标提供正确的属性集定义(如add_library()和add_executable()等命令)。...在前面的代码中,我们可以看到EXPORT_DIR变量已被设置为构建树中的cmake子目录(按照.cmake文件的约定)。...如果您决定向消耗项目暴露任何宏或函数,建议您将它们的定义放在一个单独的文件中,然后您可以从包的配置文件中include()它。...在包含助手工具模块后,我们调用生成命令并将文件写入符合find_package()所需模式的构建树中。在这里,我们故意省略了VERSION关键词,以便从PROJECT_VERSION变量中读取版本。

    67700

    面向 C++ 的现代 CMake 教程(一)

    第四章,与目标工作,介绍了逻辑构建目标,这些目标为可执行文件和库生成工件。 第五章,使用 CMake 编译 C++源代码,解释了编译过程的细节以及如何在 CMake 项目中控制编译过程。...它告诉 CMake 关于项目结构、目标和依赖项(库和其他 CMake 包)。在这个过程中,CMake 将在构建树中存储收集的信息,如系统详细信息、项目配置、日志和临时文件,供下一步使用。...安装项目 当构建工件时,用户可以将它们安装到系统中。通常,这意味着将文件复制到正确的目录中,安装库,或者从 CMake 脚本中运行一些自定义安装逻辑。...在此之后,它定义了变量(如该模块手册中所指定的)允许你针对该依赖项进行构建。...这让我们想到了变量引用和${}语法的的行为。无论何时我们尝试访问普通变量,CMake 都会从当前作用域搜索变量,如果定义了这样一个名字的变量,它会返回它的值。到目前为止,一切都好。

    1.3K01

    CMake学习笔记(二)——CMake语法

    :输出该变量所在的行; CMAKE_MODULE_PATH:定义自己的cmake模块所在路径; EXECUTABLE_OUTPUT_PATH:重新定义目标二进制可执行文件的存放位置; LIBRARY_OUTPUT_PATH...系统信息预定义变量 CMAKE_MAJOR_VERSION cmake主版本号,如2.8.6中的2 CMAKE_MINOR_VERSION cmake次版本号,如2.8.6中的8 CMAKE_PATCH_VERSION...cmake补丁等级,如2.8.6中的6 CMAKE_SYSTEM 系统名称,例如Linux-2.6.22 CMAKE_SYSTEM_NAME 不包含版本的系统名,如Linux CMAKE_SYSTEM_VERSION...cmake中预定义了两个变量:PROJECT_BINARY_DIR与PROJECT_SOURCE_DIR。...内部构建方法中,cmake生成的中间文件和可执行文件都会存放在项目目录中;外部构建方法中,中间文件与可执行文件都存放在build目录中。 笔者强烈建议使用外部构建方法。

    5.7K100

    基于TVM实现ARM架构模型优化 | 安装篇

    这篇文章基于官方的文档,详细记录如何在X86平台启用ARM的交叉编译、并启用 Relay Arm ® Compute Library Integration 安装 从 github 克隆源存储库。...git submodule init git submodule update 生成共享库 我们的目标是构建共享库: 在 Linux 上,目标库libtvm.so 在 macos...我们使用 cmake 来构建库。TVM的配置可以通过配置.cmake进行修改。 首先,检查系统中的 cmake。如果您没有 cmake,可以从官方网站获取最新版本 首先创建生成目录,将 复制到目录。...build 编辑以自定义编译选项<span class="pre">build/config.cmake</span> 在 macOS 上,对于某些版本的...-G Ninja ninja ARM设备 cd build cmake .. make runtime -j4 Python 包安装 TVM 根据您的开发环境,您可能需要使用虚拟环境和包管理器(如 或)

    1.6K10

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

    缩写变量 CMake 将预定义一些变量,提供关于宿主和目标系统的信息。...,并且我们已经知道如何在实践中使用可执行目标——在生成步骤中,CMake 将创建一个构建系统并为其填充编译每个源文件并将它们链接在一起成一个单一的二进制可执行文件的食谱。...当我们以构建模式执行cmake时,生成的构建系统将检查我们定义了哪些顶层目标,并递归地构建它们的依赖关系。让我们考虑一下来自图 4.1的例子: 从顶部开始,为组 1 构建两个库。...其中一个构建系统目标是ALL,CMake 默认生成的包含所有顶层列表文件目标的构建系统,如可执行文件和库(不一定是自定义目标)。...另一个隐式定义的构建目标是clean,它简单地从构建树中删除生成的工件。我们用它来清除所有旧文件,从头开始构建一切。不过,重要的是要理解它并不是简单地删除构建目录中的所有内容。

    70500

    CMake 秘籍(八)

    由于我们还没有定义任何目标,我们可以从将选项保存在一个中心文件开始,但稍后我们可能会将选项定义移到更接近目标的位置,以限制范围并得到更可重用的 CMake 构建块。...如第五章中的重新定义函数和宏所述,在第七章,项目结构中,我们可以使用包含保护来防止不小心多次运行代码。 它确保完全控制函数内部定义的变量的作用域。这避免了这些定义泄漏并污染主作用域。...,而不必构建和携带一个变量中的库列表,这会导致更脆弱的 CMake 代码,因为变量在过程中可能会被破坏,尤其是在大型项目中。...这样做的好处是更灵活和更局部的范围。在我们这里的例子中,代价可能是不必要的代码重复。 移植测试 现在让我们讨论如何将测试从参考构建移植到我们的 CMake 构建。...避免全局范围的语句,如add_definitions、include_directories和link_libraries。避免全局定义编译标志。如果可能,为每个目标定义编译标志。

    19810

    Qt | CMake(Qt5 VS Qt6)

    点击上方"蓝字"关注我们01、CMake>>>CMake是一个简化跨不同平台开发项目构建过程的工具。CMake自动生成生成系统,如Makefiles和Visual Studio项目文件。...注意:从Qt 5.15开始,CMake目标也可以作为Qt::Core、Qt::Gui等等使用。这简化了编写可以在Qt 5和Qt 6上运行的CMake代码。导入的目标使用与配置Qt时相同的配置创建。...如果您的项目具有自定义的CMake构建配置,您必须将您的自定义配置映射到debug或release Qt配置。...例如,find _ package(Qt5 COMPONENTS Widgets)成功时,会使以下变量可用:变量描述Qt5Widgets_COMPILE_DEFINITIONS根据库进行构建时要使用的编译定义列表...QT_NO_CREATE_VERSIONLESS_TARGETS从Qt 5.15开始,模块不仅定义了以Qt 5:::开头的目标,还定义了以Qt:::开头的目标。

    16910
    领券