问题标签 [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.
cmakelists-options - 如何在 CMakeLists 中创建全局目录
我正在研究 zephyr OS 一个简单的例子,我有 2 个带有源文件的库,我需要创建一个新目录,以便在库中的两个应用程序中实现头文件,所以直到现在我有这个:
我知道如果库头文件例如在 libA 中,我可以使用这个命令
但是 libB 中的源文件无法访问 source3.h 文件。 问题:有什么方法可以创建库头并在 CMake 中设置命令,以便在其内容中访问来自 libA 和 libB 的源文件?
cmake - CMake 相对路径库通信
假设我们有一个目录,其中也有两个库,例如:
有没有办法在没有来自 libA 和 libB 的外部 CMakeLists.txt 文件的情况下,在来自 libB 的 source2 文件中存在来自 libA 中的 source1.c 文件的访问权限?
我所需要的只是如果我能以某种方式在 libA 中按顺序构建 CMakeLists.txt,当我构建项目时没有显示错误,无法从 libB 中找到文件。
我正在尝试这个,但它失败了。
cross-compiling - CMake 在交叉编译时使用来自嵌入式文件系统的 make
我有以下 toolchain.cmake 文件:
尝试配置项目时,CMake 使用 ARM 机器文件系统中的 make 测试 C 编译器。因此,检查失败。我可以在 CMake 中设置任何变量来为其提供主机上 make 程序的路径吗?
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
我也可能误解了属性是如何工作的。
谢谢你的时间!
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 中的预编译头文件。
cmake - CMake 从 CMakeLists.txt 脚本中获取缓存变量列表
我想知道是否有办法从 CMakeLists.txt 脚本中获取缓存变量列表。我的意思是,有这样的事情:
并且,在我的 CMakeLists.txt 中
有没有办法从 CMakeLists.txt 脚本本身中获取包含 MY_VAR1、MY_VAR2 和 MY_VAR3 以及所有其他缓存变量的列表 var MY_CACHE_LIST?
谢谢
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
并且缺少包含
c - 在 CLion CMakeLists.xt 中链接 GSL 时 target_link_libraries 出错
我正在尝试在依赖于外部 C 库 GSL 的 CLion 中使用 C++ 代码。
我创建了一个 CMakeLists.txt 文件:
但是当我编译它时,我得到了以下错误:
关于可能导致这种情况的任何建议?
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++ - 如何根据在 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 实现这种情况。