问题标签 [cmake-modules]

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 回答
268 浏览

cmake - 如何修复 cmake 的 cmGLobalNInjaGenerator.cxx.o" 错误?

我正在安装更新版本的 cmake,它是 cmake 3.10.1,并且 make 命令在构建 CXX 对象源时给了我错误。

我已经安装了 ninja 1.5.1 但仍然遇到同样的错误。

用它来安装cmake:

错误是:

0 投票
1 回答
1061 浏览

cmake - 未知的 CMake 命令“add_py_modules”

我正在准备构建 openage,它是 AoE2 精灵引擎的克隆。我的 cmake 命令没有被处理。“add_py_modules”在这里不可能吗?

这适用于 Windows 10,使用 vcpkg。使用的命令:

CMakeLists.txt

输出

0 投票
0 回答
211 浏览

cmake - CMake 错误地识别有效的 C++ 编译器选项?

我有一组 C++ 潜在编译器标志存储在一个变量中,并在它之上,我在 CMake 3.14.5上运行以下测试,以查看哪些适用,哪些不适用于某个版本的编译器(I' m 使用GCCCLANGICC编译同一个项目,因此有必要仅对每个相关标志应用):

对于 GCC 8 和-Wabi标志,我得到:

现在,如果我没有将标志推入内部CMAKE_CXX_FLAGS,而是使用add_compile_options(),我的测试结果会改变!!!:

现在的测试-Wabi报告:

这导致第二种情况稍后在编译时失败:

这就像add_compile_options()修改了 的结果check_cxx_compiler_flag(),这很奇怪,因为后者在前者之前运行。

只是出于好奇,我在同一个测试中结合了这两种方法(这听起来可能是多余的):

这很有效,意思-Wabi是不会添加到 C++ 文件的编译选项中。

我不希望替换 by 的使用CMAKE_CXX_FLAGSadd_compile_options()改变以前所做的测试结果使用第三个函数。

所以,问题是:我在做我不应该做的事情吗?还是我遇到了真正的错误?

我在知识库中找不到类似的东西,当我将问题发布到CMake 错误跟踪器时,我真的不明白回复。

非常感谢你的帮助。

0 投票
1 回答
144 浏览

c++ - 将 Java 包移植到 C++ 并使用 Cmake 作为构建工具

我有以下任务。有一个java包需要移植到c++17。正在使用转译工具来帮助完成任务并避免手动重写每个文件。目前,对于所有 java 类/接口,正在创建相应的 c++ 类。

我看到的第一个问题是原始的 java 包很大,它有 180 多个文件夹。这些都在新的 c++ 代码库中复制。我们想使用 Cmake 作为构建工具,但我们看到的第一个问题是,我们不能简单地将项目拆分为多个子目录,并简单地在每个子目录中构建单独的共享库,因为它们相互依赖,并且我真的很害怕以循环依赖告终。
我知道这里有很多要问的问题,但是,关于如何使用 cmake 将这种端口形式 java 组织到 c++ 的最佳实践(如果存在的话)是什么。我们希望保留文件夹结构,因为它是合乎逻辑的。到目前为止,我看到的唯一解决方案是建立一个依赖于一切的巨大目标。高度赞赏这种结构的任何评论和想法或示例。

0 投票
1 回答
103 浏览

cmake - add_custom_command 用于将 *.y 复制到 *.txt 文件

我正在尝试使用CMake 命令将生成的*.y输出(平面亮度值,无标题信息)复制到文本文件。add_custom_command如何copy在中添加命令add_custom_command

我想将生成的*.y输出重定向到文本文件。但是>重定向没有直接在 CMake 中运行add_custom_command,所以我尝试使用add_custom_command. 在这里我想使用copy而不是>,但在这两种情况下我都无法将*.y输出重定向或复制到*.txt文件。

运行此代码后,我想生成两个文本文件,但上述 CMake 更改仍然无法实现。

0 投票
0 回答
86 浏览

cmake - cmake:如何复制预构建的二进制文件或脚本文件,而不是编译任何本地文件

我在一些子项目中有 shell 脚本。这些项目不编译任何东西。我想要的是将脚本和/或预构建的二进制文件复制到与编译本地应用程序相同的位置。

这显示了我尝试的一切。

configure_file 仅在我进行干净构建且不再进行时才有效。每次我进行差异构建时,我都需要它工作。

0 投票
1 回答
536 浏览

cmake - CMake:如何在配置文件中实现版本检查?

我为 opencl-icd 自定义 CMake 包配置文件OpenCLConfig.cmake

参考Create CMake XXConfig.cmake let other cmake project invoke

现在,我遇到一个问题:如何在配置文件中实现版本检查。

我在OpenCLConfig.cmake旁边创建OpenCLConfigVersion.cmake,其内容是:

当我在其他 CMakeLists.txt 中调用它的 opencl-icd 时,

那是find_package(OpenCL config)

我收到了这个错误:

我已经在我的 CMakeLists.txt中设置OpenCL_DIR了。"C:/SDKs/ocl-icd"

我自定义的 OpenCLConfig.cmake内容是

如何处理版本问题。

0 投票
0 回答
120 浏览

c++ - 使用 CMake(Visual Studio 2015)构建的可执行文件需要 Qt5SVG.dll,但原始 Visual Studio 2015 不需要。为什么?

情况

去年我学到了很多东西,但这是我无法理解的。项目是C++. 制作1.15.2。视觉工作室2015

我使用cmake-converter转换了整个解决方案*.sln文件,并为文件中定义的所有外部 s编写了 FindXXX.cmake 模块。*.lib*.vcxproj

每次我遇到一个我都会在调用中error: unresolved external添加相应的目标。Sometarget::somecomponenttarget_link_libraries(ConsumingTarget ... )

现在我有一个可以工作并且不会产生错误的构建。一些可执行文件会说以下内容:

“无法继续执行代码,因为找不到 somecomponent.dll……”

我有

  • .sln生成只需要文件的可执行文件.lib的原始文件
  • 生成需要文件.sln的可执行文件的 CMake 生成文件.dll
  • 工作 FindXXX.cmake 文件add_library(XXX::yyy UNKNOWN IMPORTED)
    • 他们找到标题和.lib文件(.dll文件在原始 VS 中不存在/预期/需要.sln
    • .lib他们为所有文件创建相应的目标
  • 消费目标target_link_libraries(ConsumingTarget PRIVATE XXX::yyy)
  • “一个工作构建”
  • “在启动主要功能之前”出现错误。

我试过的

我尝试定义一个 OBJECT 库并将其添加到调用的源中ConsumingTargetSometarget::somecomponenttarget_link_libraries调用中删除。对象库上的 CMake Doc

我尝试阅读和理解module 和 library之间的区别。即使是有关导入库的 CMake 文档也无法帮助我理解我的问题。

我尝试阅读并理解链接静态库和共享库之间的区别。

我的假设

  • 添加导入的库是我做错的。
    • 原因:DependenciesGui.exe显示 cmake-generated-executable 和 original-sln-executable 的不同依赖项,但链接器调用(在 VisualStudio 2015 中显示)似乎相同。
  • 尽管在此答案中描述的所有级别都激活了标志,但 CMake 文件中的整个程序优化与原始 .sln 文件中的工作方式不同。
    • 原因:使用我注意到的原始文件进行编译warning C4505: 'foobar': unreferenced local function has been removed- 我似乎没有在 cmake 生成的版本中收到这些警告。
    • 子假设:不会调用的函数被优化掉,从而消除了.dll文件的必要性。

我期待/希望

  • ConsumingTarget.exe不求就跑somecomponent.dll
  • 关于导入目标的另一种解释以及如何在不需要.dlls 的地方链接库。
  • 关于如何分析/比较两个二进制文件的符号(?)并将看到的信息映射到 CMake 命令的说明。(我正在使用DependenciesGui.exe在 .exe 文件中查找依赖项)

失败的可能原因

编辑:1:添加了失败的可能原因

0 投票
1 回答
712 浏览

homebrew - Cmake 无法在 Homebrew 中找到 boost_pyhton 库

我正在尝试在 Mac 上构建 C++ 代码。我正在使用 CMake 进行设置。这是我的文件(请注意,python3.7、python37、python 出现错误,但下面有更多内容):

我收到以下错误:

我正在使用最新的 Homebrew

并加载了可用的提升公式。

往下看,/usr/local/lib/cmake/我看到提到的大多数 boost 库,但缺少 boost_python 和 boost_numpy。我检查了在线公式定义,boost确实包括该目录中的所有 cmake 设置,但boost_python3不包括任何内容。

我错过了一些包裹吗?是否有一种可移植的方式来设置它,以便它自动找到 libboost_python37.* 文件?

0 投票
1 回答
695 浏览

cmake - 如何在 CMake 项目中包含相同依赖项的两个不同版本?

我的系统中存在 1.2 和 2.2 版本的 ExternalProject。ExternalProject 是一个 CMake 项目,当我要求它们时,CMake 可以轻松找到这两个版本。命令find_package(ExternalProject 1.2 EXACT)查找版本 1.2 并find_package(ExternalProject 2.2 EXACT)查找版本 2.2。

版本 1 和 2 彼此不兼容。API 完全不同。

我有一个 CMake 项目 MyProject,它有两个目标 targetOne 和 targetTwo。TargetOne 使用 ExternalProject 1.2,TargetTwo 使用 ExternalProject 2.2。

下面的代码没有做我想要的。相同的外部依赖不会被查找两次。TargetTwo 的编译失败。CMake 是否以任何方式支持这种情况?(除了重命名 ExternalProject 版本 2 并在不同位置编译它)。