首页
学习
活动
专区
工具
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.txtExternalProject_Add传递两个额外CMAKE_CACHE_ARGS: CMAKE_INCLUDE_PATH:CMake 查找...显然,CMake 能够执行以下操作: 确定使用哪个编译器列出源文件获取目标文件。 选择适当链接器来从这些目标文件构建库(或可执行文件)。 CMake 如何确定使用哪个编译器?...我们第 3 个配方,构建和链接共享和静态库,在第一章,从简单可执行文件到库已经知道,CMake 接受以下选项作为add_library第二个有效参数: STATIC,用于创建静态库;即,用于链接其他目标...与前一个示例相比,我们将展示如何在配置时获取 pybind11 依赖项,并使用我们在第四章,创建和运行测试,示例 3,定义单元测试并与 Google Test 链接遇到 FetchContent 方法构建我们项目

42820

何在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如何字符串删除固定前缀/后缀

19210

何在Python0到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 ,除了库和执行文件可以作为目标,一些自定义操作也可以作为目标

67950

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

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

22000

CMake 秘籍(三)

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

43520

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.2K100

解决问题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 是根据构建选项动态设置变量

1.6K10

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

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

27600

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

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

58701

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

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

5.3K100

基于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.5K10

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

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

25100

CMake 秘籍(八)

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

11610

小白入门笔记:CMake编译过程详解

此外,也是其他项目的模型,CLion。 • CMake 操作在合适抽象级别上——允许将文件分组到可重用目标和项目中。...• 目录作用域: 当add_subdirectory() 指令执行嵌套目录CMakeLists.txt 文件 如果对C/C++比较熟悉的话,CMake变量作用域就可以类比C/C++一些定义...,而CMake函数变量就是parent scope“查询”到并生成副本;(2)、CMake变量目录作用域,也是类似于C/C++include文件依赖,也就是在子目录下变量修改不会影响父目录变量定义...3.17版本后为每个函数设置官方变量,而同时CMake官方也定义了一些引用来访问命令调用传递参数, ${ARGC}输出参数数量、${ARGV}输出所有参数列表、${ARG0}, ${ARG1...简单CMake构建 本章参考源代码可以GitHub获取,网址为https://github.com/dev-cafe/cmake-cookbook。

4.5K31

CMake 秘籍(四)

还有更多 请注意,将占位符替换为值时,期望 CMake 变量名与待配置文件中使用变量名完全相同,并且位于@标记之间。在调用configure_file时定义任何 CMake 变量都可以使用。...这包括所有内置 CMake 变量,例如CMAKE_VERSION或CMAKE_GENERATOR,在我们示例。此外,每当模板文件被修改时,重新构建代码将触发构建系统重新生成。...这样,配置文件将始终保持最新。 完整内部 CMake 变量列表可以通过使用cmake --help-variable-list CMake 手册获得。...在本例,我们将在 CMake 源代码定义版本号。我们目标是记录程序版本,以便在配置项目时将其记录到头文件。...本食谱目标与前一个相似,但起点不同;我们计划是文件读取版本信息,而不是在CMakeLists.txt内部设置它。

17720
领券