问题标签 [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 投票
1 回答
2126 浏览

c++ - 忍者:找不到 CMAKE_RC_COMPILER

CMake 没有找到 clang rc 编译器。可以为cmake设置它,使其运行成功,但是ninja在尝试编译gtest时会失败。

您好,我正在尝试使用 Ninja、CMake 和 Clang 建立一个简单的测试项目。

我正在运行 Windows 10 pro 环境并安装了以下版本:

  • 铿锵声:8.0.0
  • CMake:3.15.0-rc1
  • 忍者:1.9.0

我试图:

  • 通过命令行设置rc编译器。
  • 使用 CMakeLists.txt 中的 set 命令设置 rc 编译器。

这让我通过了第一次 cmake 运行,但是当运行 ninja 时,它在 gtest 项目上第二次在内部调用 cmake 并失败并出现相同的错误。

我不想分叉 gtest 项目或更改 cmakecache 文件。

CMakeFile.txt

主文件

要构建它,我目前使用以下命令:

我希望编译器链能够成功编译项目并创建一个二进制文件,该文件将输出:“Hello world!”。

目前它在主项目中或构建 gtest 时找不到 rc 编译器而失败。

它输出以下消息:

或者它使用 rc 编译器集输出:

0 投票
1 回答
1358 浏览

c++ - 使用 cmake 获取外部依赖

我正在用 c++ 编写一个没有外部依赖项的小型库,除了测试我想在哪里使用catch2。所以我宁愿不包含该项目,并认为我可以在需要时使用 cmake 下载它,但到目前为止,看起来 cmake 仅在我执行 makefile 时下载

这是有问题的,因为 CMakeList 文件的其余部分依赖于它已经被下载,因此它可以利用 catch2 提供的 cmake 函数;没有它,构建失败。

我的以下方法看起来像这样

./CMakeList.txt:

./examples/CMakeList.txt:

./test/CMakeList.txt:

具有以下项目结构

现在这根本行不通,因为我仍然误解了多个cmakefile之间的变量范围,但是将这一切放在一个CmakeList中仍然不会让add_subdirectory发现Catch2。

我的另一个想法是将它作为一个 git 子模块包含在内,如果这将允许 cmake 在执行 makefile 之前下载 catch2。

所以总的来说,我想让我的 gitrepo 尽可能小,并且只在需要时获取依赖项。

0 投票
1 回答
435 浏览

cmake - 如何在使用 ExternalProject_Add 添加的外部项目上设置 CMake 策略和属性

我有一个使用 CMake 的 ExternalProject_Add 功能使用外部项目的 cmake 项目。有没有办法在外部项目上设置策略和属性?

我希望将在我的项目中设置的以下策略和属性也转发到外部项目,以便使用静态多线程 Windows 运行时库而不是动态库。

0 投票
1 回答
664 浏览

c++ - 在 CMake 中使用 `git submodules` 和 `ExternalProject_Add` 进行依赖管理有什么关系?

最近,我花了很多时间来关注一个早已不复存在的开发人员对我正在从事的 C++ 项目的模糊和不正确的构建说明。因此,我正在编写一个新的构建系统,并且正在寻找最好的方法。我已经决定在ExternalProject_Add项目目标之前使用 CMake 中的命令来收集和构建依赖项,但我还发现了一篇优秀的文章,建议使用 git 子模块,看起来它的作用非常相似,如果不是相同的话。所以我的问题是: git 子模块ExternalProject_Add之间有什么关系?

0 投票
1 回答
72 浏览

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

您可以获得使用以下内容构建的 CMake 目标的属性ExternalProject_add

我如何将它保存到另一个变量,即不是SOURCE_DIR

0 投票
0 回答
511 浏览

c++ - 为什么 CMake 的“ExternalProject_Add”命令不构建这个 autotools 库?

我正在尝试使用 CMake 的ExternalProject_Add命令在 Ubuntu 18.04 上使用 cmake 3.15.7 构建一个 Autotools 项目。这是我正在使用的命令:

导致错误:

该命令的变体

即不提供前缀路径,导致 cmake 挂起并且什么也不做。

谁能建议我在这里做错了什么?

如果有帮助,这里有一些附加信息

编辑

正如评论中所建议的,我尝试将调用中的命令和参数分开CONFIGURE_COMMAND

但我仍然遇到“挂起”问题:

就这样一个多小时了。

0 投票
0 回答
111 浏览

c - 将 CFLAGS="-std=gnu90" 添加到 CMakeLists.txt 会导致找不到文件“-std=gnu90”的错误

我正在尝试构建一个包含 UCL 的项目,据我所知,这里的错误可以通过设置std=gnu90UCL 项目来解决。

但是,为 C 版本添加标志会导致错误,指出找不到文件。需要修复什么?

我试图添加set(UCL_CFLAGS "-std=GNU90")到处理这个项目的块中,但是在 config.log 中我看到 UCL_CFLAGS 变量仍然是空的。

我以此作为参考: https ://git.archlinux.org/svntogit/community.git/tree/trunk/PKGBUILD?h=packages/ucl

Cmakelist 和项目位于此处:https ://github.com/quarkslab/legu_unpacker_2019/blob/master/pylegu/CMakeLists.txt

0 投票
0 回答
85 浏览

cmake - 通过 Cmake 外部项目传递依赖

有没有办法使外部依赖项依赖于项目的另外两个外部依赖项?

这是我的情况

  • 核心依赖于boost_program_optionsquetzal
  • 格查尔依赖于gdalboost_filesystemboost_unit_test_framework

如何编排这些依赖关系?我一直在尝试以下方法:

CMakelist.txt包含:

external/upstream/quetzal/CMakeLists.txt包含:

external/upstream/boost/CMakeLists.txt并且external/upstream/gdal/CMakeLists.txt似乎表现得很好。但是由于某种原因external/upstream/quetzal/CMakeLists.txt 找到了系统boost安装(1.71),当我希望它找到本地构建的boost安装(1.65)时。

我认为我将 boost 依赖项转发到 quetzal 依赖项的方式有问题,但我什至不知道一般方法是否正确。

0 投票
1 回答
442 浏览

c++ - 如何使用 CMake 从 git 下载特定的头文件以创建新的接口目标?

我不确定这是否是正确的命令,但每次谷歌搜索都会让我回到ExternalProject_Add. 根据文档,我认为从 git 存储库下载特定文件唯一要做的就是指定 URL。但这似乎不起作用。

我正在尝试提取在https://github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator中找到的 headeronly 库

在“下载步骤选项”下方,它看起来好像仅指定 URL 就会告诉 CMake 抓取该文件。我最终得到的是一个新的空目录(VulkanMemoryAllocator),但没有 CMake 错误。我不确定我需要做什么。CMake 文档中的示例似乎暗示我什至不需要走到这里就可以让任何重要的事情发生(例如):

我没有 URL_HASH 或我的构建命令(因为它只是标题)。我只想让 CMake 获取文件,这样我就可以创建接口目标。

0 投票
1 回答
197 浏览

makefile - CMake - 没有更改时不需要的重建

我正在开发一个使用 ExternalProject 的项目,BUILD_IN_SOURCE=TRUE,并且每次都重新构建整个项目(所有源和目标),就好像 make 无法看到文件已经存在一样。我的实现如下所示:

我有这样定义的目标:

运行带有一些调试输出的 make 会给我这样的消息:

adjacency_components.cpp每次我运行 make 时都会重建的几个源文件之一在哪里。为什么 make 得出结论,它需要重建这些目标?