问题标签 [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.
cmake - CMake:$ 的正确语法是什么或 $?
使用 CMake 版本 3.20.1,我正在做一些我认为相对简单的事情:验证cfg
pass 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
生成器表达式的正确语法。
c++ - 使用 Qt 对 vtable 的未定义引用
我是 Qt 的新手,我正在尝试做一个简单的 VoIP 应用程序。我使用 CMake 和 conan 来获取所有包并构建应用程序。如果我将所有 Qt 相关的类头文件和源文件放在同一个目录中,我可以毫无问题地编译,但是当我将头文件移动到另一个目录时,我发现链接器有问题。我不知道为什么,因为在 CMakeLists.txt 我声明了包含目录(并且对于与 Qt 无关的其他类工作正常),我觉得这与 autoMOC 有关。
项目结构
我省略了一些目录内容,因为那里没有发现问题。
CMakeLists.txt
登录窗口.h
登录窗口.cpp
主窗口.h
主窗口.cpp
链接器输出
正如我在介绍中所说,如果我将 xxWindow.h 和 xxWindow.cpp 放在同一个文件夹中,问题就会消失,但是当我将它们放在包含目录中时,它不会链接。我不是 cmake 专家,但对我来说似乎是正确的。关于解决方案的任何提示?
cmake - 使用 CMake 生成器表达式有条件地链接到库列表
cmake-genex可用于根据仅在 CMake 构建时可用的信息有条件地链接库:
示例 1:每个库使用一个genex
这按预期工作,但是有点冗长。为所有库使用单个genex会很整洁:
示例 2:对所有库使用一个基因
但是,Example2失败。就我而言,我使用 ninja 作为生成器。ninja.build
显示了这一点:
ninja.build
(摘抄)
我期待以下内容:
一个基因如何决定是否有条件地链接到多个库?
c++ - 如何在 CMake 中设置环境变量,以便它们在构建时可见?
在 macOS 12 上,我尝试CMakeLists.txt
像这样在文件中设置一些环境变量。
但我很快意识到这些环境变量只会影响当前的 CMake 实例。基本上,如果我message()
在同一个CMakeLists.txt
文件中使用,CMake 可以打印出与我设置的完全相同的值。但是,在构建期间,这些变量不存在并且无法指导构建阶段。
我目前的解决方案是生成 Xcode 项目文件并在Edit Scheme
. 但我想学习 CMake 并在 CMake 中进行所有配置。我的问题是,是否有任何方法可以在CMakeLists.txt
文件中设置环境变量,以便它们至少在构建阶段持续存在?
regex - 如何使用Cmake字符串正则表达式替换从路径url的多个实例中获取路径url的最后一部分并用它替换整个路径
所以我的字符串如下:
我需要的输出是:
我尝试使用字符串正则表达式,但没有得到所需的输出。这是我尝试过的:
将不胜感激任何帮助。谢谢。
cmake - Cmake字符串从包含用冒号分隔的键值的字符串列表中获取键值对
我有一个字符串列表(输入):
我想使用 foreach 获取键值并将它们设置为 cmake 常量。就像是:
所以基本上我想要最终结果,但这应该使用forloop来实现:
如何通过使用foreach导航列表中的每个字符串并将键值对设置为 cmake 常量来实现这一点?
c++ - 链接器错误:未解析的外部符号,Cmake 问题
我对 CMake 没有任何经验,如果我在这里做错了什么,请先抱歉。
CMakeLists.txt:
直到这部分一切正常,现在我尝试使用 googletest 添加一个测试。
我添加了一个名为“test”的内部目录,这就是 CMakeLists.txt:
注意粗体线 (../src/check_dummy.cpp),这是我项目的主要 cpp 文件,我显然需要将其用于测试。不幸的是,我无法将其添加到 exe 中。没有它它可以工作(如果我注释掉这一行)并且可以编译(也是我现在只有 ASSERT_EQ(true, true) 通过的测试)。
但是当我取消注释该行并添加该 cpp 文件时,我收到此错误:
请注意,我可能会用第一个编译相同的文件CMakeList.txt
,它只是在“测试”目录中的某个文件中由于某种原因不起作用。
cmake - CMake 指定每种语言的编译器选项
我有一个包含 C++ 和 Fortran 源代码的项目。事情正在编译和链接正常,但我通过add_compiler_options
. 但是,这会向 gfortran 发出 C++ 警告。有没有办法指定每种语言的编译器选项?
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 个链接错误,就像这个:
cmake - 什么是 CMake 中的 INTERFACE IMPORTED 库,它的用途是什么?
到目前为止,我已经看到了INTERFACE
用于描述仅标头库的库类型,因为它不编译源代码并且不生成库工件。我见过的IMPORTED
库类型较少,但从我读过的内容来看,它用于描述已经在磁盘上的预编译库。
我最近看到了一些具有IMPORTED INTERFACE
库类型的代码,并且对使用它的原因感到困惑。这种类型有什么属性,这种类型的一些典型用例是什么?