问题标签 [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 投票
1 回答
205 浏览

cmake - 在 cmake 中只安装一个目标

我总共有 5 个目标。其中之一是静态库。其他 4 个是可执行文件。我不希望每次都建立图书馆。所以我只想编译这个库,把它保存在一个特定的位置,以便其他可执行文件可以引用这个库。我知道我们可以通过使用install命令来做到这一点。

但是如果我使用install命令,它正在编译所有目标。如何只编译一个目标并将其安装到一个位置?

0 投票
0 回答
32 浏览

windows - 如何告诉我的 CMake 脚本将 .lib 文件放在 output/lib 中

目前,当我使用 CMake 构建我的 windows 项目(动态库)时,我的.dll文件进入./output/bin,我的.h文件进入./output/include,但我的.lib文件只进入./lib.

我可以做些什么来让我的.lib文件转到./output/lib吗?我没有做 CMake 脚本,它很大,所以我不太确定去哪里看。这里有一些我认为可能会有所帮助的片段。

任何建议表示赞赏。

0 投票
1 回答
363 浏览

cmake - cmake find_library()找不到PATHS指定的库

我有一个find_library()与下面匹配的声明(这是基于amazon kinesis 项目):

find_library(SRTP_LIBRARIES NAMES srtp2 REQUIRED PATHS ${OPEN_SRC_INSTALL_LIB_PREFIX})

正确指向该OPEN_SRC_INSTALL_LIB_PREFIX库所在的位置。我可以直接观察到这一点。但是,这个find_library()电话失败了,我很困惑为什么会这样做。

我认为也许 cmake 是先搜索其他路径并忽略我指定的路径,所以我也用标志尝试了它,因为NO_DEFAULT_PATH应该将搜索限制在指定的路径中:

find_library(SRTP_LIBRARIES NAMES srtp2 REQUIRED PATHS ${OPEN_SRC_INSTALL_LIB_PREFIX} NO_DEFAULT_PATH)

......仍然没有运气。

任何想法为什么这不起作用?我已经通过prints验证了OPEN_SRC_INSTALL_LIB_PREFIX它是库的有效目录。message()

请注意,这是交叉编译,尽管我不明白为什么这会改变行为,find_library()除非我从文档中遗漏了一些东西

0 投票
0 回答
17 浏览

cmake - cmake 中每个目标的单独日志文件

如何为 cmake 中的每个可执行目标创建单独的日志文件?例如,如果我有三个名为 A、B 和 C 的可执行目标。我想要三个日志文件 A.log、B.log 和 C.log

0 投票
1 回答
464 浏览

cmake - CMake:set_target_properties 失败,目标由生成器表达式定义

我在使用 cmake 生成器表达式TARGET_NAME_IF_EXISTS时遇到问题。有了这个CMakeLists.txt

我明白了

我希望set_target_properties根据是否SLIB_BUILD_STATIC设置减少到其中之一:

我究竟做错了什么?

0 投票
0 回答
32 浏览

cmake - cmake中接口库数量的最大限制

有谁知道我们可以链接到cmake中的可执行目标的接口库的数量是否有最大限制

0 投票
0 回答
70 浏览

cmake - cmake中的打印接口库

如何在cmake中打印接口库。实际上我想这样做是出于调试目的。所以想知道如何打印该接口库中的所有包含目录

我有一个接口库 A,它链接到 2 个接口库 B 和 C(即 A 包括 B 和 C)。现在我想知道 A 是否包含所有路径不是..如何检查?

0 投票
1 回答
92 浏览

cmake - Ninja Make 系统不接受 GENERATED 命令

我有一组应由特殊编译器编译的汇编文件。在此之后,它应该被添加到由我设置的编译器创建的库中CMAKE_C_COMPILER。它在 Mingw Makefile 系统上运行良好,但不适用于 Ninja Make。

以下是 cmakelists.txt 中的代码

file1.o 和 file2.o 由不同的汇编程序生成。我也为这些文件设置了属性。

问题1: 自定义目标special_asm不直接生成目标文件。它正在生成一个批处理脚本。这就是为什么我创建了另外一个自定义目标special_asm_cmd来运行批处理脚本,该脚本将生成目标文件。Mingw make 系统直接从中生成目标文件,special_asm但 Ninja 并没有那样做。

问题 2 我已经GENERATED true为特殊生成的目标文件设置了属性。但是忍者给出了以下错误。但是Mingw Make能够解决依赖并且没有错误

0 投票
1 回答
213 浏览

cmake - CMake add_custom_command() POST_BUILD 生成器表达式扩展不起作用

我想在构建之后运行 POST_BUILD 操作(但仅在调试配置中)。

在阅读了 add_custom_command 文档和一个可能的解决方案后,我了解到我可以将我的 COMMAND “包装”到$<CONFIG:Debug>生成器表达式中(以确保它在发布模式下是“空的”)。

我尝试了以下方法:

但这给了我 CMake 配置时警告和构建时的硬故障(使用 Ninja 生成器):

我尝试了许多可能的引号组合(包括转义引号):
COMMAND $<$<CONFIG:Debug>:"${CMAKE_COMMAND} -E echo \"hi there from debug build\"">
等等
COMMAND "$<$<CONFIG:Debug>:${CMAKE_COMMAND} -E echo \"hi there from debug build\">"

但是即使它删除了配置时警告,它仍然会在构建时产生硬错误。

问题:实现我想要的正确方法是什么?有可能是这样还是这里有 CMake 限制?

(注意:如果可能的话,我想让整个命令在一个地方执行。我也知道其他可能的解决方法)

0 投票
0 回答
128 浏览

windows - CMake list(APPEND ...)将正斜杠切换为反斜杠

我在使用 CMake list(APPEND ...)时遇到了一个非常奇怪的问题。我的脚本如下(只是一个例子):

生成产生以下输出:

我预计两个自定义目标都将运行相同的命令。但是, build.ninja 文件以不同的方式处理每个自定义目标:

有谁知道如何防止 list(APPEND ...) 从“翻转”斜杠(“/”)到反斜杠(“\”)?更奇怪的是 cmake_print_variables(...) 输出不受影响。

提前致谢。-乌里