问题标签 [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.
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
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 命令设置策略并禁止显示此警告。
在这种情况下,目标似乎是未知的......但它确实存在并且没有错字。这里有什么问题?
c - 带有打印的 CMake 构建后输出命令
我正在使用 CLion 1.2 为 STM32 目标构建嵌入式 C 项目。使用 GNU ARM 工具进行交叉编译效果很好,但是,我想arm-none-eabi-size
在构建可执行文件后运行,并将该命令的输出打印到构建输出窗口。
我已经彻底查看了add_custom_command
宏,但是,我不打算生成输出文件,这就是宏似乎要做的事情。
以下是CMakeLists.txt
我在项目中使用的:
这是arm-none-eabi-size
在控制台中执行时打印的内容:
我将如何运行该运行并将该输出显示在构建窗口中?
谢谢!
linux - CMake:如何在 add_custom_command(...) 中使用 if 条件
我想通过 add_custom_command(...) 在 CMakeLists.txt 中使用 Linux if 条件,因为我需要运行这些 if 条件并在 makefile 中进行一些判断。像这样:
如果我想使用我该怎么办
什么时候制作makefile?非常感谢您的帮助!
cmake - 如何使用 add_custom_command 使用生成器表达式复制 dll?
我必须在编译时在我的解决方案中复制 dll,所以我使用 add_custom_command 如下:
在 cmakelist.txt 中,我将上述函数称为:
但我收到错误:
所以,我不知道它无法到达安装 qt 相关内容的位置,还是我在 add_custom_command 生成器表达式中犯了错误?我希望该函数非常通用,以至于我想在解决方案中获得的任何 dll 在编译期间都放在目标中。
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.txt和custom_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的任何提及,这对我来说看起来很奇怪。
期待您的帮助。
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
项目的任何一个或主输出文件的自定义目标,但这也无济于事。
理想情况下,这将在项目建成后运行,如果可以告诉我我做错了什么,或者如果这完全可以做到这一点,我将不胜感激?
cmake - add_custom_command 取决于另一个 add_custom_command
我们有两个add_custom_command
子句,其中一个依赖于另一个:
第一个命令使用编译器将
.osl
源文件编译为.oso
目标文件oslc
:注意对
${oslc}
: 我们显式依赖,${oslc}
因为我们需要确保它存在,然后才能执行此命令。第二个命令通过从其他地方复制编译器来“构建”(实际上是部署)编译器:
/li>oslc
虽然此设置有效,但它的副作用是始终执行两个命令(第二个命令后跟第一个命令),即使.osl
输入文件没有被修改。
似乎这种行为特定于 Windows。它似乎在 Linux 上运行良好。
如果从第一个命令中删除了对 to 的依赖,${oslc}
则根本不再执行第二个命令,即使oslc
缺少编译器也是如此;但另一方面,.osl
文件现在仅在自上次构建后发生更改时才根据需要(只要oslc
存在)重新编译。
这个设置有什么问题吗?如果不是,那么结合这两个功能的正确方法是什么:仅在文件自上次构建以来发生更改时编译.osl
文件,并在编译器尚不存在时“构建”编译器(第一步需要)?oslc
GitHub 上提供了实际的 CMake 脚本:
cmake - add_custom_command 在失败时不会重新运行
在 CMake 中,我想使用add_custom_command(... POST_BUILD ...)
可能COMMAND
会失败的。
观察
- 第一次运行
make
会失败,因为add_custom_command( ... COMMAND exit 1)
is not的退出码0
。--> 这是我所期望的。 - 第二次运行
make
会通过,因为add_custom_command
不会再次运行中指定的命令。--> 这不是我想要的。在自定义命令起作用之前,我希望make
失败。
最小失败示例
问题
- 我该如何解决这个问题?
- 这是 CMake 的预期行为吗?
一种解决方案
我知道我可以创建一个自定义命令,它不是一个POST_BUILD
,而是TARGET.passed
在成功时输出一个文件。但是,我想避免这种情况。因为 POST_BUILD 似乎是这里最合适的用法。(我正在更改结果文件的功能。)
macos - 强制 CMake add_custom_commands 不将鼠标/键盘焦点放在 Mac OS X 上
我们的构建包含许多作为构建过程的一部分运行的测试,以确保任何重要的东西都不会被某人的更改破坏。这些是简单的命令行应用程序,没有 GUI。
在 Mac OS X 上,当从 Qt Creator 中构建时,这些程序中的每一个都会启动一个新的终端窗口,该窗口会获得焦点。这会打断我在构建运行时输入的任何内容,这非常令人沮丧。
CMake(或 Mac OS 或 Qt Creator)中是否有强制这些自定义命令不聚焦的选项?