在我的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 ...
如果只需要支持POSIX平台(例如,带有Make工具链的Linux,Mac OS,Windows,则可以在add_custom_command
中添加显式检查: