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

cmake - cmake add_custom_command

我正在为 add_custom_command 苦苦挣扎。让我详细解释一下这个问题。

我有这些 cxx 文件和 hxx 文件集。我在它们每个上运行一个 perl 脚本来生成某种翻译文件。该命令看起来像

对于 header.hxx 文件也是如此。

所以我最终会得到一些多个命令(每个命令都用于一个文件)

然后我在这些命令生成的输出上运行另一个 perl 脚本(source_cxx_tro,header_hxx_tro)

dir.trx 是输出文件。

我有这样的东西。

我期望的是在构建后期构建目标时,将首先构建 trofiles。但事实并非如此。${trofiles} 未构建,因此构建后命令以失败告终。有什么办法可以告诉 POST_BUILD 命令取决于以前的自定义命令?

有什么建议么 ?

在此先感谢,苏里亚

0 投票
3 回答
39502 浏览

cmake - CMake add_custom_command 未运行

我正在尝试使用add_custom_command在构建期间生成文件。该命令似乎从未运行过,所以我制作了这个测试文件。

我尝试运行:

并且没有生成 hello.txt。我做错了什么?

0 投票
2 回答
1175 浏览

cmake - xml 文件上的 add_custom_command

我们的系统使用一些 xml 文件来生成一些代码。所以我创建了一个自定义命令来扫描和解析这些文件,并按照规定生成内容。这就是我所做的:

问题是 add_custom_command 仅在我运行 cmake 时运行,即使我修改了文件夹内的一些 xml。

当对文件进行更改时,我该如何运行?

0 投票
1 回答
2044 浏览

cmake - 定义不同目录中自定义命令之间的依赖关系

我有一个项目,其中一个自定义命令的输出用作另一个自定义命令的输入,但在不同的目录中。例如:

目录lib/CMakeLists.txt包含:

目录test/CMakeLists.txt包含:

所以我需要确保 libfoo 是在 test.yy 之前构建的。文档说 add_custom_command() 的 DEPENDS 子句只能具有文件级依赖项。让我们试试看会发生什么:

另一方面,如果我尝试通过说 来创建目标级别的依赖项DEPENDS libfoo,则错误将更改为:

因此,似乎文件级或目标级依赖项在这里都不起作用。有没有办法让一个自定义命令的输出成为另一个目录中另一个自定义命令的输入?

0 投票
2 回答
2730 浏览

cmake - cmake add_custom_command is aways out of date

I have the problem that add_custom_command is always out of date and therefore runs on every build. the custom command runs a tool that is a target of the same project to generate a file that is used by another target:

In the build output (visual studio 2010) I always see ** GeneratorTool **. I would expect that it does not build again once generated.h exists and is newer than main.cpp. Any ideas?

Thanks, Jochen

0 投票
1 回答
3470 浏览

cmake - CMake 中的条件 add_custom_command

我正在使用宏为我的 cmake 项目创建预编译头文件。对于 gcc,此宏使用 add_custom_command 创建一个 *.h.gch 文件,然后可以将其与其他源文件一起添加到目标文件 add_executable/add_library。问题是有时同一个 *.h.gch 文件用于两个不同的目标,因为有些库是作为静态库和动态库构建的。

我需要在每个 add_library 调用之后调用宏,因为对于 MSVC/Xcode,需要调整目标属性以启用 PCH 使用/编译。但是对于 gcc,这会导致错误,因为我试图将 add_custom_command 与已经具有构建规则(.gch)的输出一起使用。目前,我通过跳过名称中包含“静态”的任何目标的 add_custom_command 来避免此错误 - 这恰好可以工作,因为项目中的所有静态库都有一个“静态”后缀,但它显然不是一个非常优雅的解决方案.

cmake 中有没有办法检查目标是否已经有构建规则,或者有一种方法可以让 add_custom_command 静默失败而不会导致错误?或者有没有办法改变我的设计,这样我就可以完全避免这个问题?我想一个“解决方案”是在每个 CMakeLists 中添加一个条件检查,但我真的不想这样做。

这是我目前使用的代码:

宏:

...然后在 CMakeLists 中,如下所示:

谢谢你的帮助!如果这是重复的,我很抱歉 - 关于 add_custom_command 已经有几个问题,但它们似乎都没有解决我所追求的问题。

0 投票
1 回答
16355 浏览

cmake - CMake:动态添加对 add_custom_command 的依赖

我有一个包含许多子项目的 CMake 项目。他们每个人都可以使用我提供的函数来生成一个包含某些特定信息的小文本文件(通过调用 add_custom_command)。在最后一步,我想将所有这些文件合并到一个大文本文件中。

我创建了一个自定义命令,它搜索创建的文件(都在一个地方)并合并它们。

问题是我想让这最后一步取决于子项目中的所有小步骤,而我实际上并不知道将提供多少文件。

我的最终命令如下所示:

我的 create-small-text-file-for-each-subproject 命令看起来像:

当我创建这些小文件时,我想做一些事情,比如让“combination.txt”依赖于 /path/${sub_project_name}.txt

所以我希望我可以:

但是,这只适用于目标。

我也尝试过将 set_source_files_properties 与 OBJECT_DEPENDS 一起使用,但它似乎不起作用(也许它打算与 add_target 的 cpp 文件一起使用?)

我看到的最后一种让它工作的方法是使用一个缓存变量,它会累积所有这些小文件路径,然后像这样使用它:

但这是我想做的最后一件事。

0 投票
2 回答
2577 浏览

cmake - cmake add_custom_command that is executed on every build

I want to have something in CMake that will be executed whenever I enter make

thats what I'm currently doing. unfortunately make build-date-xxx will generate the file only once.

even without the add_custom_target declaration the file is only build once.

the result should be something like this in GNU Make

in that makefile whenever make is entered. since all is the first target it will always be invoked and the custom command echo "hallo welt" is actually executed.

0 投票
1 回答
2716 浏览

visual-studio - cmake:add_custom_command 仅在第一次调用

对于自定义目标(使用 add_custom_target 创建),我遇到了 add_custom_command 的问题。

我的总体想法是将静态代码分析工具合并到 cmake 工具链中。我的解决方案基于此处描述的解决方案:https ://github.com/rpavlik/cmake-modules/blob/master/CppcheckTargets.cmake

简而言之,我要为其运行静态代码分析的每个项目都有以下两行代码:

该模块在文件的顶部有这个:

稍后在函数中添加自定义命令:

我看到的问题是该命令仅针对首先包含该文件的项目添加。我不确定为什么以及发生了什么。我使用 message() 命令验证了以下内容:

  • 目标只创建一次
  • add_custom_command 为调用该函数的每个项目运行,并带有适当的参数

但是当我实际在visual studio中查看目标时,只添加了第一个包含/函数调用命令。

如果只包含文件而不调用函数,则根本不添加任何自定义命令。

期望的行为:

我想要一个名为“ANALYZE_CODE”的目标来运行调用函数添加的所有命令。

即,如果 3 个项目包括上面的两行,则创建一次目标 ANALYZE_CODE,但会向其中添加 3 个自定义命令,每个项目一个。

0 投票
1 回答
1704 浏览

cmake - 何时触发 cmakes add_custom_command POST_BUILD?

让我们考虑一下我已经为一个目标注册了一个自定义命令:

我正在努力找出命令实际运行的时间。总是在这样检查目标之后?

即使“什么都不需要做”

或者只是为了以防万一必须为目标做点什么?