问题标签 [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.
cmake - 如何修复 cmake 的 cmGLobalNInjaGenerator.cxx.o" 错误?
我正在安装更新版本的 cmake,它是 cmake 3.10.1,并且 make 命令在构建 CXX 对象源时给了我错误。
我已经安装了 ninja 1.5.1 但仍然遇到同样的错误。
用它来安装cmake:
错误是:
cmake - 未知的 CMake 命令“add_py_modules”
我正在准备构建 openage,它是 AoE2 精灵引擎的克隆。我的 cmake 命令没有被处理。“add_py_modules”在这里不可能吗?
这适用于 Windows 10,使用 vcpkg。使用的命令:
CMakeLists.txt:
输出:
cmake - CMake 错误地识别有效的 C++ 编译器选项?
我有一组 C++ 潜在编译器标志存储在一个变量中,并在它之上,我在 CMake 3.14.5上运行以下测试,以查看哪些适用,哪些不适用于某个版本的编译器(I' m 使用GCC、CLANG和ICC编译同一个项目,因此有必要仅对每个相关标志应用):
对于 GCC 8 和-Wabi
标志,我得到:
现在,如果我没有将标志推入内部CMAKE_CXX_FLAGS
,而是使用add_compile_options()
,我的测试结果会改变!!!:
现在的测试-Wabi
报告:
这导致第二种情况稍后在编译时失败:
这就像add_compile_options()
修改了 的结果check_cxx_compiler_flag()
,这很奇怪,因为后者在前者之前运行。
只是出于好奇,我在同一个测试中结合了这两种方法(这听起来可能是多余的):
这很有效,意思-Wabi
是不会添加到 C++ 文件的编译选项中。
我不希望替换 by 的使用CMAKE_CXX_FLAGS
会add_compile_options()
改变以前所做的测试结果并使用第三个函数。
所以,问题是:我在做我不应该做的事情吗?还是我遇到了真正的错误?
我在知识库中找不到类似的东西,当我将问题发布到CMake 错误跟踪器时,我真的不明白回复。
非常感谢你的帮助。
c++ - 将 Java 包移植到 C++ 并使用 Cmake 作为构建工具
我有以下任务。有一个java包需要移植到c++17。正在使用转译工具来帮助完成任务并避免手动重写每个文件。目前,对于所有 java 类/接口,正在创建相应的 c++ 类。
我看到的第一个问题是原始的 java 包很大,它有 180 多个文件夹。这些都在新的 c++ 代码库中复制。我们想使用 Cmake 作为构建工具,但我们看到的第一个问题是,我们不能简单地将项目拆分为多个子目录,并简单地在每个子目录中构建单独的共享库,因为它们相互依赖,并且我真的很害怕以循环依赖告终。
我知道这里有很多要问的问题,但是,关于如何使用 cmake 将这种端口形式 java 组织到 c++ 的最佳实践(如果存在的话)是什么。我们希望保留文件夹结构,因为它是合乎逻辑的。到目前为止,我看到的唯一解决方案是建立一个依赖于一切的巨大目标。高度赞赏这种结构的任何评论和想法或示例。
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 更改仍然无法实现。
cmake - cmake:如何复制预构建的二进制文件或脚本文件,而不是编译任何本地文件
我在一些子项目中有 shell 脚本。这些项目不编译任何东西。我想要的是将脚本和/或预构建的二进制文件复制到与编译本地应用程序相同的位置。
这显示了我尝试的一切。
configure_file 仅在我进行干净构建且不再进行时才有效。每次我进行差异构建时,我都需要它工作。
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内容是
如何处理版本问题。
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::somecomponent
target_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 库并将其添加到调用的源中ConsumingTarget
并Sometarget::somecomponent
从target_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
- 关于导入目标的另一种解释以及如何在不需要
.dll
s 的地方链接库。 - 关于如何分析/比较两个二进制文件的符号(?)并将看到的信息映射到 CMake 命令的说明。(我正在使用DependenciesGui.exe在 .exe 文件中查找依赖项)
失败的可能原因
- 一个可执行文件在使用 cmake-converter 转换后没有 /DELAYLOAD... 指令。打开的问题。问题标题仍然有效。
编辑:1:添加了失败的可能原因
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.* 文件?
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 并在不同位置编译它)。