问题标签 [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 回答
244 浏览

macos - 如何检测我的 Cmake 代码在哪个版本的 macOS 上运行?

我需要确定运行 cmake 文件的 MacOS 版本。

0 投票
0 回答
248 浏览

cmake - 使用 CMake 添加带有生成的源文件的库

tl;博士;

在 CMake 中使用 ADD_LIBRARY 时,它将检查cmake ..所有源文件是否存在。我有一些是在编译时生成的。有没有办法强制 CMake 忽略丢失的文件,因为它们会在需要时存在?

完整版本:

我正在尝试使用 CMake 构建 Sqlite3,并且可以编译它,但是,我需要在 CMake 中注释掉几行并运行它,然后取消注释并再次运行它。我想一口气做完所有事情。

我遇到的主要问题是 Sqlite3 使用了一个名为“lemon”的代码生成器。所以要正确构建一切,我需要编译柠檬。然后我需要运行柠檬。一旦柠檬完成运行,就会有一个名为“parse.c”的新文件。“parse.c”需要包含在构建 sqlite3 的源代码中。

我将删除代码以显示适用的位。

所以这里发生了3个步骤:

  1. 可执行柠檬被创建。
  2. 柠檬用于创建 parse.c(除其他外)
  3. parse.c 与大量其他文件一起编译以创建 sqlite3 库。

使用 add_dependencies 这应该可以工作。但事实并非如此。它不起作用的原因是第一次传递时 build/parse.c 不存在。我已经能够通过注释掉 parse.c 来解决它。完成一半建筑后。然后我可以取消注释它,它将成功编译。

我已经研究过使用 ADD_CUSTOM_COMMAND,我相信它会在cmake ..运行而不是运行时运行柠檬ninja。但是,当cmake ..运行时,“柠檬”还不存在,因此自定义命令无法运行。

编辑 1

所以我想出了一个黑客...

因此,当cmake ..运行时,它将在正确的位置创建一个空文件。但是,必须有更好的方法。帮助表示赞赏。

0 投票
3 回答
165 浏览

c++ - 如何将分号(;)附加到cmake字符串

在 cmake 3.19.2 中,我尝试通过以下方式将分号添加到字符串中:

但分号总是被忽略。

以下代码也不起作用:

或者

或者

Cmake 文档说,什么:“将所有参数连接在一起并将结果存储在命名的 <output_variable> 中。”

我做错了什么?

0 投票
0 回答
23 浏览

cmake - cmake 中的 .phony 目标替代项以创建自定义目标

假设 Makefile 有一个像这样的虚假目标

我们可以通过给出以下命令从命令行直接运行 Makefile 中的这个 .phony 目标

我想用 CMakeList 做同样的事情。如何告诉 cmake 用我给的名字创建一个虚假目标?

注意:我不想每次运行 make 时都运行这个虚假目标。相反,我想在需要时手动运行它。我知道 add_custom_target() 将生成虚假目标,并且在 add_dependency() 的帮助下,我们可以将虚假目标附加到目标。但是我的要求不一样。我想在需要时手动运行这个虚假目标。

0 投票
2 回答
630 浏览

shell - 如何从 shell 脚本调用 cmake 方法?

我有一个参数化函数,mytestprogram.cmake如下所示:

问题:
如何get_output_from_input从 shell 脚本调用 cmake 方法?

我了解到有一个-P <source.cmake>标志,它将 CMake 置于脚本处理模式,我们可以使用它执行任意 CMake 代码,如下所示。

get_output_from_input所以,在这种情况下,我相信从 shell 脚本调用的方式如下所示?

但上述技巧不起作用。我的跑步方式execute_process正确吗?

试图找出问题所在,似乎echo $CMAKE_PROGRAM返回空?这可能是原因吗?我在这里想念什么get_output_from_input

环境:
cmake 版本 3.18.2
macOS Catalina

0 投票
0 回答
57 浏览

cmake - 包含路径对汇编程序不可见

cmake 版本:3.18.5 MinGW Makefiles 主机:windows 目标:ppc 编译器:windriver

我有一个程序集文件 file.s,其中包含一个标头 header.h(.include "header.h")。我已将标头的路径添加到 target_include_directories()。但汇编器无法找到指定的头文件。如何将包含目录传递给汇编程序?

0 投票
1 回答
35 浏览

cmake - 如何覆盖/附加 CMAKE_C_CFLAG

cmake 版本:3.18.5 MinGW Makefiles 主机:windows 目标:ppc 编译器:windriver

我想创建两个具有不同标志的不同可执行文件。例如,我想创建一个带有标志(-tPPCE)的可执行文件和另一个带有标志(-tPPCEV)的可执行文件,这些标志定义了硬件的类型。如果我尝试在他们各自的 CMakelists.txt 中设置这个值

它不工作。

仅当我在设置了所有其他标志的工具链文件中设置此值时,它才有效。

0 投票
1 回答
36 浏览

cmake - 如何在make期间只编译一组目标

我正在使用 cmake 作为构建生成器。版本:3.18.5 我的项目中有 5 个目标。我只想编译特定的目标集,这取决于我在 make 期间给出的选项。这个怎么做?

例如,如果我运行

我希望目标 app1、app3、app5 应该被编译。如果我跑

我想要目标 app2,app4 应该被编译。

我在cmakelist.txt里面尝试了上面的东西,

但我没有得到预期的结果。

0 投票
1 回答
28 浏览

cmake - 无法生成 Mingw Makfile

cmake 版本:3.18.5 我使用的是 cmake-gui,它运行顺利。现在我已经切换到命令行。它工作了几天,突然从没有我得到以下错误的地方。

我正在运行的 cmake 命令,

我得到的错误是,

0 投票
2 回答
261 浏览

cmake - 我可以控制 CMake 中 target_sources 的源排除吗?

我是 CMake 的新手,我想知道是否有可能target_sources()根据变量排除某些来源。

假设我在下面有这个

我想根据名为 ie 的标志从 myDir3 中排除/包含源/目录myFlag。我怎样才能做到这一点?