问题标签 [cmake-custom-command]

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

cmake - add_custom_command not working

I am trying to understand add_custom_command usage, I wrote a minimal make file (CMakeLists.txt) like shown below When I run the make file using

$cmake.

$make I don't see perfecthash.cpp being created and the build breaks

$cmake .

$make

give the below error

0 投票
2 回答
5130 浏览

cmake - Cmake:基于变量内容的 add_custom_command 参数

我想要一个 Cmake 函数来将一些二进制文件复制到特定位置。为此,我有以下函数定义:

以及以下用法:

我在项目树中定义了 target_1、target_2 和 target_3。考虑到这一点,我得到了以下 Cmake 配置输出:

binary_copy.cmake:15 (add_custom_command) 处的 CMake 警告 (dev):

未设置策略 CMP0040:add_custom_command() 的 TARGET 签名中的目标必须存在。运行“cmake --help-policy CMP0040”以获取策略详细信息。使用 cmake_policy 命令设置策略并禁止显示此警告。

在这种情况下,目标似乎是未知的......但它确实存在并且没有错字。这里有什么问题?

0 投票
2 回答
4079 浏览

c - 带有打印的 CMake 构建后输出命令

我正在使用 CLion 1.2 为 STM32 目标构建嵌入式 C 项目。使用 GNU ARM 工具进行交叉编译效果很好,但是,我想arm-none-eabi-size在构建可执行文件后运行,并将该命令的输出打印到构建输出窗口。

我已经彻底查看了add_custom_command宏,但是,我不打算生成输出文件,这就是宏似乎要做的事情。

以下是CMakeLists.txt我在项目中使用的:

这是arm-none-eabi-size在控制台中执行时打印的内容:

我将如何运行该运行并将该输出显示在构建窗口中?

谢谢!

0 投票
2 回答
3469 浏览

linux - CMake:如何在 add_custom_command(...) 中使用 if 条件

我想通过 add_custom_command(...) 在 CMakeLists.txt 中使用 Linux if 条件,因为我需要运行这些 if 条件并在 makefile 中进行一些判断。像这样:

如果我想使用我该怎么办

什么时候制作makefile?非常感谢您的帮助!

0 投票
1 回答
3585 浏览

cmake - 如何使用 add_custom_command 使用生成器表达式复制 dll?

我必须在编译时在我的解决方案中复制 dll,所以我使用 add_custom_command 如下:

在 cmakelist.txt 中,我将上述函数称为:

但我收到错误:

所以,我不知道它无法到达安装 qt 相关内容的位置,还是我在 add_custom_command 生成器表达式中犯了错误?我希望该函数非常通用,以至于我想在解决方案中获得的任何 dll 在编译期间都放在目标中。

0 投票
1 回答
413 浏览

cmake - cmake 将自定义命令绑定到现有的顶级目标失败

我想要一个顶级自定义目标和嵌套子模块,它们能够通过添加/绑定 custom_command 来扩展这个已经存在的目标。现在我面临一个问题:如果add_custom_command(TARGET target_name ...)不是在定义目标的文件中使用(目标是在顶级 CMakeLists.txt 上定义的),那么这个 custom_command 将被简单地忽略。

细节:

1) 在顶层CMakelists.txt上创建 custom_target

2)在子目录“sub”中有其他CMakeLists.txt(模块),我希望能够使用自定义命令扩展现有目标。

3)当我创建构建目录并运行时

输出文件是custom_target.txtcustom_command1.txt,但是没有custom_command2.txt,这实际上是我的问题。

如果我查看build/CMakeFiles/custom_tg.dir/build.make我没有看到那里提到custom_command2.txt。这是build.make文件的内容:http: //pastebin.com/zVVS4sYL

实际上我在 Cmake 生成的文件树中找不到关于custom_command2.txt的任何提及,这对我来说看起来很奇怪。

期待您的帮助。

0 投票
1 回答
343 浏览

linux - 在构建时从 CMake 运行 cscope

我正在使用 Ubuntu Linux。

当我从我的项目目录运行“make”时,我一直试图让以下 cscope 命令运行,因此它会在我创建项目时重新编译 cscope 并获取更新的名称信息。

cscope -b -q -U -R

add_custom_command根据我的研究和一些阅读,当您使用CMakeLists.txt中的函数执行“制作”时,我应该能够让 CMake 运行命令。

然而,它的许多尝试和变体都没有成功。是否可以按照我的意愿运行它add_custom_command

简单地这样做似乎不起作用:

add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/cscope.in.out ${CMAKE_CURRENT_BINARY_DIR}/cscope.out ${CMAKE_CURRENT_BINARY_DIR}/cscope.po.out COMMAND cscope -b -q -U -R)

我也尝试过使用 TARGET 重载add_custom_command,并制作一个依赖于ALL项目的任何一个或主输出文件的自定义目标,但这也无济于事。

理想情况下,这将在项目建成后运行,如果可以告诉我我做错了什么,或者如果这完全可以做到这一点,我将不胜感激?

0 投票
1 回答
327 浏览

cmake - add_custom_command 取决于另一个 add_custom_command

我们有两个add_custom_command子句,其中一个依赖于另一个:

  1. 第一个命令使用编译器将.osl源文件编译为.oso目标文件oslc

    注意对${oslc}: 我们显式依赖,${oslc}因为我们需要确保它存在,然后才能执行此命令。

  2. 第二个命令通过从其他地方复制编译器来“构建”(实际上是部署)编译器:oslc

    /li>

虽然此设置有效,但它的副作用是始终执行两个命令(第二个命令后跟第一个命令),即使.osl输入文件没有被修改。

似乎这种行为特定于 Windows。它似乎在 Linux 上运行良好。

如果从第一个命令中删除了对 to 的依赖,${oslc}则根本不再执行第二个命令,即使oslc缺少编译器也是如此;但另一方面,.osl文件现在仅在自上次构建后发生更改时才根据需要(只要oslc存在)重新编译。

这个设置有什么问题吗?如果不是,那么结合这两个功能的正确方法是什么:在文件自上次构建以来发生更改时编译.osl文件,并在编译器尚不存在时“构建”编译器(第一步需要)?oslc

GitHub 上提供了实际的 CMake 脚本:

0 投票
1 回答
1452 浏览

cmake - add_custom_command 在失败时不会重新运行

在 CMake 中,我想使用add_custom_command(... POST_BUILD ...)可能COMMAND会失败的。

观察

  1. 第一次运行make会失败,因为add_custom_command( ... COMMAND exit 1)is not的退出码0。--> 这是我所期望的。
  2. 第二次运行make会通过,因为add_custom_command不会再次运行中指定的命令。--> 这不是我想要的。在自定义命令起作用之前,我希望make失败。

最小失败示例

问题

  1. 我该如何解决这个问题?
  2. 这是 CMake 的预期行为吗?

一种解决方案

我知道我可以创建一个自定义命令,它不是一个POST_BUILD,而是TARGET.passed在成功时输出一个文件。但是,我想避免这种情况。因为 POST_BUILD 似乎是这里最合适的用法。(我正在更改结果文件的功能。)

0 投票
1 回答
58 浏览

macos - 强制 CMake add_custom_commands 不将鼠标/键盘焦点放在 Mac OS X 上

我们的构建包含许多作为构建过程的一部分运行的测试,以确保任何重要的东西都不会被某人的更改破坏。这些是简单的命令行应用程序,没有 GUI。

在 Mac OS X 上,当从 Qt Creator 中构建时,这些程序中的每一个都会启动一个新的终端窗口,该窗口会获得焦点。这会打断我在构建运行时输入的任何内容,这非常令人沮丧。

CMake(或 Mac OS 或 Qt Creator)中是否有强制这些自定义命令不聚焦的选项?