CMake:如果自定义命令无法创建输出之一,则失败

问题描述 投票:1回答:1

在我的CMakeLists.txt中,我将add_custom_command与add_custom_target结合使用以调用代码生成步骤。

如果代码生成步骤成功,但是add_custom_command的OUTPUT参数中提到的一个文件丢失,由于Why does GNU make delete a file中概述的原因,make将删除OUTPUT中提到的第一个文件>

(第一个输出文件,因为它是与生成的Makefile中的命令关联的“主”文件)

到目前为止,很好。我的问题是这不会立即使构建失败

。相反,当在编译中实际使用生成的代码时,编译器会抱怨缺少标头,具有讽刺意味的是,该标头不是生成器未生成的文件,而是已删除的文件。

[仅在用VERBOSE = 1运行make时出现了解释文件已删除的消息,这使我在黑暗中停留了太长时间。

Deleting primary custom command output "/app/tests/eclipseProject/projects/math/build/aragen/matrix2Component/matrix2/includes/serviceInterfaces/matrix/proxy_Mat_SI.h" because another output "/app/tests/eclipseProject/projects/math/build/aragen/matrix2Component/matrix2/vsomeip/serviceInterfaces/matrix/proxy_vsomeip_Mat_SI.h" does not exist.

在执行编译之前,如何确保在尝试构建生成目标时构建失败?

在我的CMakeLists.txt中,我将add_custom_command与add_custom_target结合使用来调用代码生成步骤。如果代码生成步骤成功,但是OUTPUT ...

makefile cmake
1个回答
0
投票

如果只需要支持POSIX平台(例如,带有Make工具链的Linux,Mac OS,Windows,则可以在add_custom_command中添加显式检查:

© www.soinside.com 2019 - 2024. All rights reserved.