问题标签 [cmakelists-options]

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

cmakelists-options - 如何在 CMakeLists 中创建全局目录

我正在研究 zephyr OS 一个简单的例子,我有 2 个带有源文件的库,我需要创建一个新目录,以便在库中的两个应用程序中实现头文件,所以直到现在我有这个:

我知道如果库头文件例如在 libA 中,我可以使用这个命令

但是 libB 中的源文件无法访问 source3.h 文件。 问题:有什么方法可以创建库头并在 CMake 中设置命令,以便在其内容中访问来自 libA 和 libB 的源文件?

0 投票
0 回答
25 浏览

cmake - CMake 相对路径库通信

假设我们有一个目录,其中也有两个库,例如:

有没有办法在没有来自 libA 和 libB 的外部 CMakeLists.txt 文件的情况下,在来自 libB 的 source2 文件中存在来自 libA 中的 source1.c 文件的访问权限?
我所需要的只是如果我能以某种方式在 libA 中按顺序构建 CMakeLists.txt,当我构建项目时没有显示错误,无法从 libB 中找到文件。

我正在尝试这个,但它失败了。

0 投票
0 回答
37 浏览

cross-compiling - CMake 在交叉编译时使用来自嵌入式文件系统的 make

我有以下 toolchain.cmake 文件:

尝试配置项目时,CMake 使用 ARM 机器文件系统中的 make 测试 C 编译器。因此,检查失败。我可以在 CMake 中设置任何变量来为其提供主机上 make 程序的路径吗?

0 投票
1 回答
69 浏览

cmake - 为什么要为 CACHE 变量设置 STRINGS 属性?

好吧,我总是很难理解 cmake 文档,但关于 set_property 我无法理解,尤其是在这个例子中,取自 Openpose 的 CMakeLists。

我确实了解 CACHE 变量,但是这两个 set_property 的效果是什么,因为变量 ${DL_FRAMEWORK} 似乎被检查为纯文本,如“CAFFE”或“NV_CAFFE”。

这是完整的 CMakeLists.txt: https ://github.com/CMU-Perceptual-Computing-Lab/openpose/blob/master/CMakeLists.txt

我也可能误解了属性是如何工作的。

谢谢你的时间!

0 投票
0 回答
52 浏览

c++ - 如何在 CMake 3.15 中为 clang++/gcc 创建和使用预编译头文件

在我的项目中,有一些几乎在所有文件中都使用的标题。因此,为了提高构建速度,我决定使用预编译头文件。我正在使用 CMake 3.15 和 clang++。在 CMake 3.16 中,我们可以使用 target_precompile_headers()。但在 3.15 中它不可用。

我将尝试在这里解释一个示例。我有常见的标题,例如engine.h、wheel.h、door.h。这些文件存储在 my_proj/includes/ 目录中。这些标题包含在我所有的子项目中。

我想知道如何制作和使用它们作为 cmake 3.15 中的预编译头文件。

0 投票
1 回答
43 浏览

cmake - CMake 从 CMakeLists.txt 脚本中获取缓存变量列表

我想知道是否有办法从 CMakeLists.txt 脚本中获取缓存变量列表。我的意思是,有这样的事情:

并且,在我的 CMakeLists.txt 中

有没有办法从 CMakeLists.txt 脚本本身中获取包含 MY_VAR1、MY_VAR2 和 MY_VAR3 以及所有其他缓存变量的列表 var MY_CACHE_LIST?

谢谢

0 投票
0 回答
50 浏览

c - 在 cmake 项目中链接第三方静态库

我有一个包含多个子项目的 cmake 项目。在其中一个子项目中,我需要使用外部静态库(位于 中${CMAKE_SOURCE_DIR}/ext_lib),CMakeLists.txt文件看起来像这样(方法 1):

这工作正常并且编译得很好。但是,与外部库相关的部分,我想放在一个单独的CMakeLists.txt文件中。我想我可以CMakeLists.txt在与我的外部静态库所在的文件夹(即)相同的文件夹中创建一个新的,${CMAKE_SOURCE_DIR}/ext_lib内容如下(方法 2)

然后添加add_subdirectory("ext_lib)到主CMakeLists.txt文件中,只target_link_libraries(my_project PRIVATE external_lib)my_project子项目中使用。但这不起作用。有人可以提示我缺少什么吗?

(我只是添加message(...)以查看是否CMakeLists.txt包含)

编辑:

不工作我的意思是它不能正确编译 - 我得到fatal error: ext_lib.h: No such file or directory #include "ext_lib.h"(使用方法 2)

我查看了生成的.cmake文件,使用方法 1,外部库的链接是正确的,../../../ext_lib/libext.a并且包括-isystem ../../../ext_lib/include

对于方法 2,它没有正确链接 - 在.cmake它刚刚说的文件中-lexternal_lib并且缺少包含

0 投票
1 回答
38 浏览

c - 在 CLion CMakeLists.xt 中链接 GSL 时 target_link_libraries 出错

我正在尝试在依赖于外部 C 库 GSL 的 CLion 中使用 C++ 代码。

我创建了一个 CMakeLists.txt 文件:

但是当我编译它时,我得到了以下错误:

关于可能导致这种情况的任何建议?

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 投票
0 回答
23 浏览

c++ - 如何根据在 Visual Studio 中选择的配置运行 cmakelist.txt 文件中的 add_custom_command

我想跑

add_custom_command(TARGET ProjectName POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_directory "SRC" "DEST" COMMENT "My Custom message")

仅当 Visual Studio 在调试配置中编译项目时。如果项目是在发布模式下编译的,那么我不想复制这个特定的目录。如何使用 cmake 实现这种情况。