问题标签 [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 - find_package(Backtrace) 行为异常
我正在查看FindBacktrace模块的文档,与FindThreads不同- 我没有看到我可以依赖的适当库目标,例如Backtrace::Backtrace
. 它真的丢失了还是只是没有记录?
另外,当我使用这个模块时,我得到:
在我的CMakeCache.txt
(在 Devuan GNU/Linux 机器上)。这很奇怪。我期待看到-lbacktrace
- 因为那是我得到的地方backtrace_create_state
并且backtrace_pcinfo
(我需要使用Boost stacktrace)。
那么,什么是“默认库集”?libbacktrace
默认情况下肯定不会链接到。
cmake - 自定义目标的属性
我add_cusmtom_target
用来进行自定义构建,但是这个目标有什么属性?尤其是如何获取目标中列出的依赖项列表:
D
找不到,如何获取自定义目标的属性?
cmake - cmake 检查类中是否存在公共字段
我正在使用的库具有可变数量的公共字段,具体取决于版本。在 Cmake 中,是否可以检测库头中的某个字段是否存在?(可能类似于CHECK_FUNCTION_EXISTS
)
cmake - 如何让 CTest 在一个可执行文件中运行少量测试
我们有 10 多个 Google 测试可执行文件,它们总共提供了 5000 多个测试用例。
到目前为止,我们的 CTest 配置使用的add_test
命令导致每个测试可执行文件从 CTest 的角度来看都是一个测试。
最近,我们使用GoogleTest
模块将add_test
命令替换为gtest_discover_tests
命令。这样,所有单独的测试用例现在都对 CTest 可见。现在,超过 5000 个测试用例中的每一个都是 CTest 中的一个单独测试。
这很好地增强了并行运行(一台强大的机器运行的测试用例比我们拥有的测试可执行文件多得多)并允许我们使用 CTest 命令行界面来过滤测试用例等,从而抽象出所使用的测试框架。
但是,我们遇到了 Valgrind 运行的主要障碍!现在每个单独的测试用例都单独运行,导致 Valgrind 机器被设置和拆卸超过 5000 次。整个套房的时间从大约 10 分钟增加到近 2 小时,这是不可接受的。
现在,我想知道是否有任何方法可以通过仅调用一次可执行文件来使 CTest 从同一个可执行文件批量运行测试。我们会为 Valgrind 运行而不是普通运行这样做。恐怕没有办法,尤其是它可能需要GoogleTest
模块以某种方式解释如何做到这一点。但也许有人已经遇到过类似的问题并以某种方式解决了?
我知道解决方法是跳过 Valgrind 运行的 CTest。只需获取测试可执行文件并在 Valgrind 下“手动”运行它们。可行的,也可能以自动化方式(因此测试可执行文件的列表以某种方式“查询”,可能带有--show-only
参数ctest
,而不是硬编码)。但它使界面(命令行、输出等)不太一致。
cmake - cmake configure_package_config_file 未正确添加 PATH_VARS
我有两个包在同一个 catkin 工作区下
我有包 A 和包 B,其中 B 需要获取 A 的包含文件和库文件。
在CMakeLists.txt
A 中,我有
并定义fooConfig.cmake.in
如下
使用上面的代码集,我应该可以使用find_package
B 中的关键字
在我期望的情况下,
foo_LIBRARIES
不应为空(自动填写),
foo_TEST
也不应为空,因为我通过提供PATH_VARS
但我看到了以下结果
为了更深入地了解该行为,我直接添加message
了生成fooConfig.cmake
和打印出来的foo_TEST
变量。但是,我注意到它是空的。
总而言之,我想了解
- 为什么
${foo_LIBRARIES}
没有正确设置 - 是否
${foo_TEST}
预期 B 的 CMakeLists.txt 内为空。 - 为什么
${foo_TEST}
里面不可用cmake.in
谢谢
cmake - 创建外部模块导入文件
我正在转换一个项目以停止使用Visual Studio 项目文件并切换到使用cmake
.
该项目已经有几年的历史了,并且使用了位于代码树之外的自定义预编译外部库:
src/
... 源码树 ...
externalLibs/
Python27/
include/
... 头文件 ...
libs /
python27.lib
python27_d.lib
cmake/
Modules/
FindPython2.cmake
我所做的是添加目录cmake/Modules
,并在其中添加文件 FindPython2.cmake
。
然后,我创建了CMakeLists.txt
项目组件之一:
以上只是相关部分的摘录。
include( ../../../../../global.cmake
我在路径定义中包含了一个全局变量set( CMAKE_MODULE_PATH "${ROOT_PATH}/cmake/Modules"$ {CMAKE_MODULE_PATH} )
(find_package( Python2 REQUIRED )
我放了一个message( )
看看一切是否正常,它向我展示了我的期望:
CMAKE_MODULE_PATH: E:/cmake/Modules
我的FindPython2.cmake
模块是这样的:
我生成项目没有问题:
但是在编译时:
LINK : 致命错误 LNK1104: no se puede abrir el archivo 'Python2-NOTFOUND.obj' [E:\Desarrollo\PATH\build\Test\ConnectorTests\ConnectorTests.vcxproj]
我在用着:
cmake --version
cmake 版本 3.17.20032601-MSVC_2
- 我究竟做错了什么 ?
- 我该如何解决?
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
cmake - 如何在 CMake 包配置文件中指定可选依赖项?
我正在尝试正确指定MyLibConfig.cmake
项目文件中的依赖项。在CMakeLists.txt
我有这样的事情:
所以在MyLibConfig.cmake
我写了类似的东西:
现在,当我编写另一个需要 myLib 的项目时,我会:
这失败了,因为 MyLib 配置文件没有找到 bLib,但我希望它被视为可选的。处理此问题的最佳现代 CMake 实践是什么?
python - 缺少 Python3_SOABI 的 Windows 上的 find_package python3 错误
我在 Windows 上使用 cmake 版本 3.17 并使用以下代码来查找 Python3 解释器。
对于python3虚拟环境,它失败并出现以下错误
我试图打印索引失败的 _Python3_INTERPRETER_PROPERTIES 的值。
当我用 find_package(PythonInterp 3.5 REQUIRED) 替换它时,它适用于 _Python3_INTERPRETER_PROPERTIES 的以下值
在错误情况下,缺少 Python3_SOABI。知道如何解决这个问题,因为 PythonInterp 自 cmake 版本 3.12 以来已被弃用?