问题标签 [cmake-language]

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 投票
2 回答
84 浏览

cmake - CMake:$ 的正确语法是什么或 $?

使用 CMake 版本 3.20.1,我正在做一些我认为相对简单的事情:验证cfgpass via的值-DCMAKE_BUILD_TYPE=<cfg>是否是有效配置。

参考CMake 生成器表达式文档,这似乎是字符串所在位置的$<CONFIG:cfgs>特殊情况。我得到的 CMake 运行时错误强化了这一点,并告诉我我遗漏了一些东西。$<IN_LIST:string,list>${CMAKE_CONFIGURATION_TYPES}

我期望工作的是:

当从命令行调用 ascmake .. -DCMAKE_BUILD_TYPE=Debug时,我收到以下错误:

更换

与:

或者

给了我以下内容:

$<IN_LIST:str,list>在尝试使用IN_LIST.


随后的实验,使用:

产量:

所以我尝试了蛮力:

它评估但不正确,因为它在列表中没有找到“调试”,所以它在 if 语句中输入代码。最后尝试:

是否按预期工作。注意: NOT应该适用于括号内的表达式。但它仍然不能帮助我理解CONFIG生成器表达式的正确语法。

0 投票
1 回答
101 浏览

c++ - 使用 Qt 对 vtable 的未定义引用

我是 Qt 的新手,我正在尝试做一个简单的 VoIP 应用程序。我使用 CMake 和 conan 来获取所有包并构建应用程序。如果我将所有 Qt 相关的类头文件和源文件放在同一个目录中,我可以毫无问题地编译,但是当我将头文件移动到另一个目录时,我发现链接器有问题。我不知道为什么,因为在 CMakeLists.txt 我声明了包含目录(并且对于与 Qt 无关的其他类工作正常),我觉得这与 autoMOC 有关。

项目结构

我省略了一些目录内容,因为那里没有发现问题。

CMakeLists.txt

登录窗口.h

登录窗口.cpp

主窗口.h

主窗口.cpp

链接器输出

正如我在介绍中所说,如果我将 xxWindow.h 和 xxWindow.cpp 放在同一个文件夹中,问题就会消失,但是当我将它们放在包含目录中时,它不会链接。我不是 cmake 专家,但对我来说似乎是正确的。关于解决方案的任何提示?

0 投票
1 回答
96 浏览

cmake - 使用 CMake 生成器表达式有条件地链接到库列表

cmake-genex可用于根据仅在 CMake 构建时可用的信息有条件地链接库:

示例 1:每个库使用一个genex

这按预期工作,但是有点冗长。为所有库使用单个genex会很整洁:

示例 2:对所有库使用一个基因

但是,Example2失败。就我而言,我使用 ninja 作为生成器。ninja.build显示了这一点:

ninja.build(摘抄)

我期待以下内容:

一个基因如何决定是否有条件地链接到多个库?

0 投票
0 回答
70 浏览

c++ - 如何在 CMake 中设置环境变量,以便它们在构建时可见?

在 macOS 12 上,我尝试CMakeLists.txt像这样在文件中设置一些环境变量。

但我很快意识到这些环境变量只会影响当前的 CMake 实例。基本上,如果我message()在同一个CMakeLists.txt文件中使用,CMake 可以打印出与我设置的完全相同的值。但是,在构建期间,这些变量不存在并且无法指导构建阶段。

我目前的解决方案是生成 Xcode 项目文件并在Edit Scheme. 但我想学习 CMake 并在 CMake 中进行所有配置。我的问题是,是否有任何方法可以在CMakeLists.txt文件中设置环境变量,以便它们至少在构建阶段持续存在?

0 投票
2 回答
95 浏览

regex - 如何使用Cmake字符串正则表达式替换从路径url的多个实例中获取路径url的最后一部分并用它替换整个路径

所以我的字符串如下:

我需要的输出是:

我尝试使用字符串正则表达式,但没有得到所需的输出。这是我尝试过的:

将不胜感激任何帮助。谢谢。

0 投票
3 回答
82 浏览

cmake - Cmake字符串从包含用冒号分隔的键值的字符串列表中获取键值对

我有一个字符串列表(输入):

我想使用 foreach 获取键值并将它们设置为 cmake 常量。就像是:

所以基本上我想要最终结果,但这应该使用forloop来实现:

如何通过使用foreach导航列表中的每个字符串并将键值对设置为 cmake 常量来实现这一点?

0 投票
0 回答
34 浏览

c++ - 链接器错误:未解析的外部符号,Cmake 问题

我对 CMake 没有任何经验,如果我在这里做错了什么,请先抱歉。

我的项目中的目录

CMakeLists.txt:

直到这部分一切正常,现在我尝试使用 googletest 添加一个测试。

我添加了一个名为“test”的内部目录,这就是 CMakeLists.txt:

注意粗体线 (../src/check_dummy.cpp),这是我项目的主要 cpp 文件,我显然需要将其用于测试。不幸的是,我无法将其添加到 exe 中。没有它它可以工作(如果我注释掉这一行)并且可以编译(也是我现在只有 ASSERT_EQ(true, true) 通过的测试)。

但是当我取消注释该行并添加该 cpp 文件时,我收到此错误:

请注意,我可能会用第一个编译相同的文件CMakeList.txt,它只是在“测试”目录中的某个文件中由于某种原因不起作用。

0 投票
0 回答
10 浏览

cmake - CMake 指定每种语言的编译器选项

我有一个包含 C++ 和 Fortran 源代码的项目。事情正在编译和链接正常,但我通过add_compiler_options. 但是,这会向 gfortran 发出 C++ 警告。有没有办法指定每种语言的编译器选项?

0 投票
0 回答
86 浏览

c++ - 将 SHARED 库与子文件夹中的 CMake 链接

我在 Windows 10 下链接 CMake 可执行项目时遇到问题,该项目是共享库主项目的子项目。

所以,我的主要项目是一个共享库。然后我有一个子文件夹,其中有一个可执行项目,它链接到我的库。但我无法成功地将它们联系起来。

如果我将其构建为静态,一切正常。

如何将子文件夹上的可执行子项目链接到主项目上的主共享库?

CMakeLists.txt 的main project

CMakeLists.txt 的subproject

编辑:我有这个: SET(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS YES CACHE BOOL "Export all symbols") 用于导出我的代码上的符号。由于 CRT 库,我有 50 个链接错误,就像这个:

0 投票
1 回答
27 浏览

cmake - 什么是 CMake 中的 INTERFACE IMPORTED 库,它的用途是什么?

到目前为止,我已经看到了INTERFACE用于描述仅标头库的库类型,因为它不编译源代码并且不生成库工件。我见过的IMPORTED库类型较少,但从我读过的内容来看,它用于描述已经在磁盘上的预编译库。

我最近看到了一些具有IMPORTED INTERFACE库类型的代码,并且对使用它的原因感到困惑。这种类型有什么属性,这种类型的一些典型用例是什么?