问题标签 [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.

0 投票
0 回答
36 浏览

cmake - 从外部 CMakeLists.txt 文件导入目标,已经构建了外部源

我正在尝试将Refinitiv Real-Time SDK集成到我自己的应用程序中。

我已经下载了源代码并构建了库。

通常,您会期望有一个 INSTALL 目标,它将库和头文件安装到某个位置,然后,如果幸运的话,find_package我们可以稍后使用该模块将库目标导入到我们自己的项目中。

不幸的是,这些都没有提供。

那么,如何将库及其头文件导入我的项目?

ExternalProject_Add

我不想ExternalProject_Add每次重新配置我的项目时都使用标准来下载和构建源代码。(特别是因为我们的 CI 服务器必须为每次构建都执行此操作。)我想构建一次(并使其成为 CI 服务器的 docker 映像的一部分),然后链接库/直接包含头文件从我复制源的地方。

add_library INTERFACE

我知道我可以创建一个新的INTERFACE库目标

但是,每当 Refinitiv 发布新的 SDK 版本并决定更改路径或链接依赖项等时,这很乏味且容易中断

问题:

我要做的是使用他们的CMakeLists.txt文件,但只能访问已经构建的目标,而不是将它们构建为我的构建的一部分。

这可能吗?

0 投票
0 回答
39 浏览

c++ - 使用 CMake 构建外部依赖

我正在尝试编译一个依赖于第 3 方库的 C++ 项目,例如称为Foo 。ExternalProject_Add()为此,我在 CMakeLists.txt 文件中使用该命令。但是,此库有一个依赖项,例如称为Bar,必须首先构建它。Bar库的源文件位于Foo库的源目录的子目录中。所以,这是我的问题:如何使用命令编译Bar库和FooExternalProject_Add()?非常感谢您的帮助。

更新:我忘了说FooBar库都是 CMake 项目,需要在构建步骤之前进行配置步骤。

0 投票
0 回答
34 浏览

cmake - 在CMake中处理第三方库的多级依赖的正确方法是什么

我正在开发一个依赖多个第三方库的CMake项目,这些库可能进一步依赖于其他第三方库。依赖项都构建为静态库。我ExternalProject用来下载和编译依赖项。

与 链接lib1时,缺少和lib2的符号。我的替代方法是手动导入并链接到它们。但这将导致所有依赖项构建两次。当存在许多依赖项时,手动处理变得非常困难。lib4lib5lib4lib5lib1

我正在考虑是否有办法lib2创建一个lib2-ALL包含来自 和 的所有内容lib2lib4大型库 () lib5。所以lib1只需要链接到lib2-ALL. 但是,我不确定如何在 CMake 中正确执行此操作。

管理这种多级第三方库依赖项的正确方法是什么?

0 投票
1 回答
37 浏览

cmake - CMake SWIG 对外部项目标头的依赖

我有一个项目“A”,它依赖于另一个项目“B”。

  • ProjectB 安装一些头文件,例如 B1.h、B2.h。
  • ProjectA 尝试使用 SWIG 创建 B1.h 和 B2.h 的 Python 包装器。

项目A使用:

  • ExternalProject_Add(ProjectB ...)将 ProjectB somwhere 编译并安装到二进制目录中。
  • Swig_Add_Library(ProjectB ...)创建 Python 包装器;此命令创建一个目标_ProjectB

我想确保在 SWIG 运行之前安装了 B1.h、B2.h ,因此我添加了以下命令: add_dependencies(_ProjectB ProjectA)

在 Windows 上,这可以正常工作。

但是在 Linux 上,add_dependencies不考虑该命令,它给出:

我确信提供给 SWIG 的包含目录是正确的:确实,当我make第二次运行时,这是有效的,因为 ProjectB 是通过第一次调用成功安装的make.

我使用 CMake 3.13.5。

任何帮助都会很棒!

0 投票
1 回答
27 浏览

cmake - CMake:我可以将 ExternalProject 包装在一些我可以链接到我的目标的对象中吗?

将此库作为外部项目包括在内。根据文档,经过一些小的调整,我有这个:

但是,原始文档仅包含目录并单独链接。我可以以某种方式将它们包装到一个目标中,如果我链接到该目标,我可以从该库中获取所有内容吗?

编辑:我目前设置导入目标的尝试是这样的:

当我使用target_link_libraries()将 LIEF 链接到我的项目时,CMake 生成成功,但随后在生成的 makefile 中出现错误。