问题标签 [external-project]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
cmake - CMake:使用 ExternalProject_Add 不同库路径的最佳实践
我有一个CMakeLists.txt
看起来像这样的小项目:
显然,这些呼吁target_link_libraries
并不理想。它们非常重复,我明确地编写了构建系统应该已经知道的路径和文件名。 处理来自外部项目的不同输出目录和文件名的最佳方法是什么?
有没有办法可以查询外部项目以获取实际的输出目录?(例如通过ExternalProject_Get_Property
?)我可以使用一些神奇的生成器表达式吗?(ExternalProject_Get_Property(gainput_project RUNTIME_OUTPUT_DIRECTORY)
不起作用。)
似乎find_library
可以工作,只是在配置时输出库不存在,所以失败了。
也许我应该将外部项目设置为INSTALL_DIR
我控制并始终使用的一些硬编码目录?(它还会在 Windows 上获取Debug
和Release
子目录吗?)
该FetchContent
模块能否让我更好地访问所包含项目的输出?我在那里的文档中看不到任何明显的东西。
Idk,我已经尝试了很多想法,但到目前为止没有任何效果。我觉得我可能遗漏了一些基本的东西——这是我第一次使用ExternalProject
. 有小费吗?
c++ - get_property 找不到目标,来自 ExternalProject
我遇到了一个让我有点难过的 CMake 问题。它涉及一个 CMake 项目,该项目为我在工作中开发的应用程序构建依赖项。我现在必须添加一个新的依赖项 libnest2d,它本身也有三个依赖项,其中一些也是新的。
为了让 libnest2d 构建,我有这个 ExternalProject_Add 调用:
这个项目依赖于 Boost Headers、NLopt 和 Clipper。那些 Boost 标头和 Clipper 都很好,但它以某种方式抱怨 NLopt 并出现以下错误:
所以它声明nlopt
目标没有定义。但是,该目标是使用另一个ExternalProject_Add
调用定义的,与其他两个依赖项相同:
如果没有 NLopt 依赖项,libnest2d 构建良好(因为我的本地系统上仍然安装了依赖项),但不能保证在启动 libnest2d 之前构建和安装 NLopt,如果我执行此构建确实会出错具有多个线程的虚拟机。
如果我暂时删除nlopt
依赖项并调用cmake .. && make help
,那么我会看到这nlopt
是可用的目标之一。我也可以打电话make nlopt
,它开始按预期构建 NLopt。
你可以在这里查看我的整个源代码:https ://github.com/Ultimaker/cura-build-environment/tree/CURA-7259_pynest2d 。在撰写本文时,我正在提交 39298d203d115b60d7093f0a801be1bad0ba7842。
我发现的其他问题并不相同,也没有为我提供解决方案:
- 这个相关的问题有同样的错误,但它似乎是由 OP 使用的工具引起的,我没有使用。
- 这个问题和这个错误报告是一个被构建选项禁用的目标的问题,对我来说不是这种情况。目标显然存在,我没有选择禁用它。
- 有一个导致此问题的旧错误,但在 CMake 2.8 中已修复。我正在使用 CMake 3.16.3。
总而言之,我怎样才能使 libnest2d 外部项目依赖于 NLopt?为什么两个依赖项被接受,但一个不被接受?
visual-studio - 如何构建不在 Visual Studio 解决方案中的项目?
有没有办法告诉 Visual Studio 构建不属于其解决方案的项目?我们一直在研究许多不同的选项,但没有成功,例如嵌套项目、共享项目和构建事件。
示例架构:
现在,我无法构建解决方案 1,因为项目 B 不会构建,因为项目 i 和 ii 尚未构建。我必须切换到解决方案 2,构建它,然后返回解决方案 1,然后构建工作。这听起来不是最好的做事方式,但我不是决定的人,我正在寻找一种在不将项目 i 和 ii 添加到解决方案本身的情况下简化流程的方法,即使添加了一些构建事件或什么不是解决方案将被允许。我怎样才能做到这一点?
cmake - 将慢速外部项目添加到 cmake
我正在使用作为源代码树内的 tar 存档提供的外部依赖项。我正在使用构建 autotools 项目
这个项目几乎永远不会改变,但编译需要几分钟(比源代码的其余部分长得多)。每次之后
外部项目的安装目录仍然存在,但它会在下一次编译期间被提取和重建。有没有办法在清理时保留这个外部项目/如果档案没有改变,只构建一次?
cmake - ExternalProject_Add for Makefile 项目在构建过程中出错
我正在尝试添加Postgresql
作为我的项目的依赖项,我正在使用 ExternalProject 模块从 github 下载源代码并构建,但是从 cmake ( cmake --build .
) 运行时构建步骤失败。配置步骤似乎成功了,如果我转到下的 Build 目录EP_BASE
并执行make
它会成功运行。我在构建过程中收到以下错误:
我的外部项目添加如下所示:
这是在 Ubuntu 20.04 LTS 上运行的,带有 cmake 3.16.3、gcc 9.3.0
c++ - 如果文件夹存在,在cmake ExternalProject_Add 中是否有跳过download_step 的简单方法
如果已经有一个克隆了 repo 的文件夹,我需要跳过 git 下载,比如ExternalProject_Add
如果你CMakeLists.txt
提供了一个,但不想写一个 custom 。如果将依赖项手动添加到文件夹项目中,基本上只需要完全离线构建项目。download_step
update_step
GIT_TAG
DOWNLOAD_COMMAND
例如:
test
这样,每次第一次构建项目时都会删除文件夹并再次克隆它(如果我手动删除构建文件夹),我可以在此之后完全离线构建,但确实需要始终离线使用它。已经尝试设置缓存变量,例如:
除非另有说明,否则完全禁用下载,但是对 的if
内部调用ExternalProject_Add()
显然不起作用,并且使用if
外部会引入额外的代码,使其更难维护,而且很难看。
任何简单的替代方案都是有效的,在此先感谢。
c++ - FetchContent 与 ExternalProject
我正在使用 Cmake 构建一个项目并用于FetchContent
管理依赖项。由于几个原因,我不能依赖系统范围内安装的包,所以这个包有很大帮助。它允许我做这样的事情:
现在只要 repo 是一个带有CMakeLists.txt
. 我很想对非 cmake 项目使用类似的方法,例如 Botan 库。显然
并没有真正完成这项工作,构建没有运行,因为它不是一个 cmake 项目。有人会考虑添加
或类似于 declare 命令的东西,但FetchContent
文档明确表示这些特定参数在传递给FetchContent
.
FetchContent
现在斗争是显而易见的——在这种情况下如何正确使用?我正在考虑ExternalProject_Add
在 fetchcontent 之后使用,但是 fetchcontent 似乎没用(ExternalProject 也可以下载 git repo)。此外,我想在配置时使用 botan 的一些目标(如果有意义的话)。
c++ - 阻止 ExternalProject 的“make clean”或使用 CMake 添加自定义清理
我的项目有一个外部项目,我使用 CMakeExternalProject_Add
命令添加了它自己的 CMake。
每次我添加标志或进行重建时,外部项目也会被重建并且需要很长时间(外部项目的重建包括提取和动态库构建)。
当我们重建我的项目时,如何防止它的重建?
外部项目.cmake:
CMakelists.txt:
installation - 如何使 ExternalProject_Add 默认构建不调用安装
我正在将 CMake 构建支持添加到基于 make 的项目中。我为此使用 ExternalProject_Add。INSTALL_COMMAND 之前的所有操作都可以正常工作。但我希望默认目标(我猜是所有目标)不包括安装。基本上我希望默认目标只包含构建然后安装为单独的命令。我怎样才能做到这一点?将 INSTALL_COMMAND 保留为 "" 并添加一个
似乎没有帮助。回声从未跑过。
cmake - ExternalProject_Add:如何在您的项目中使用构建依赖项?
我正在尝试使用ExternalProject_Add
(在这种情况下libpqxx
)构建第 3 方依赖项:
完成此步骤后,我需要在项目中使用的 libpqxx 工件位于:
- 头文件:
${CMAKE_CURRENT_BINARY_DIR}/ext/src/libpqxx_ext/include
- 静态库:
${CMAKE_CURRENT_BINARY_DIR}/build/src/libpqxx.a
在我的项目中使用结果:
如何使这些工件可用于我的项目?
我尝试了以下方法:
这不起作用,因为在配置时${LIB_PQXX_SRC_DIR}/include
还不存在。
CMake 错误
foo/CMakeLists.txt
:导入的目标“libpqxx
”包括不存在的路径在其
INTERFACE_INCLUDE_DIRECTORIES
. 可能的原因包括:
该路径已被删除、重命名或移动到另一个位置。
安装或卸载过程未成功完成。
安装包有问题,并且引用了它不提供的文件。
添加add_dependencies
告诉 cmakelibpqxx_ext
需要先构建是 libpqxx
行不通的。
请注意,如果我libpqxx
完全删除,然后构建我的项目(以便libpqxx_ext
构建),然后添加它,现在一切正常,因为该ExternalProject_Add
步骤已经运行......但显然当我进行干净的结帐时这会中断,所以它不是可行的。
我还试图告诉 cmake 生成了包含目录,但这没有效果
问题:
我使用
add_library(libpqxx STATIC IMPORTED GLOBAL)
导入工件是正确/推荐使用结果的方式ExternalProject_Add
吗?如果是,我怎么能告诉 cmake 这
${LIB_PQXX_SRC_DIR}/include
是一个生成的目录?如果不是,将结果
ExternalProject_Add
提供给我的项目的推荐方法是什么?