Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Makefile CMake:如果自定义命令无法创建其中一个输出,则失败_Makefile_Cmake - Fatal编程技术网

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

Makefile CMake:如果自定义命令无法创建其中一个输出,则失败,makefile,cmake,Makefile,Cmake,在我的CMakeLists.txt中,我使用add_custom_命令和add_custom_目标来调用代码生成步骤 如果代码生成步骤成功,但“添加\自定义\命令的输出参数”中提到的某个文件丢失,则出于中概述的原因,make将删除“输出”中提到的第一个文件 (第一个输出文件,因为它是与生成的Makefile中的命令关联的“主”文件) 到目前为止,一切顺利。我的问题是,这不会立即使构建失败。相反,当生成的代码实际用于编译时,编译器会抱怨缺少头,具有讽刺意味的是,头不是生成器没有生成的文件,而是要删

在我的CMakeLists.txt中,我使用add_custom_命令和add_custom_目标来调用代码生成步骤

如果代码生成步骤成功,但“添加\自定义\命令的输出参数”中提到的某个文件丢失,则出于中概述的原因,make将删除“输出”中提到的第一个文件

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

到目前为止,一切顺利。我的问题是,这不会立即使构建失败。相反,当生成的代码实际用于编译时,编译器会抱怨缺少头,具有讽刺意味的是,头不是生成器没有生成的文件,而是要删除的文件

解释文件被删除的消息也只在make以VERBOSE=1运行时出现,这让我在黑暗中呆了太久

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.

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

如果您只需要支持POSIX平台(例如Linux、Mac OS、Windows with make toolchain),则可以在
添加自定义\u命令中添加显式检查:

set(输出文件检查“测试”是否生成了预期文件:)
foreach(列表中的输出文件)
列表(附加输出文件检查“-a”“-e”“${output\u file}”)
endforeach()
添加自定义命令(
输出${OUTPUT_files}
命令“您的_生成器”
命令“${CMAKE_COMMAND}”-E echo“检查是否已生成所有预期文件…”
命令${output\u file\u check}
命令“${CMAKE_COMMAND}”-E echo“成功:所有预期文件都存在。”
逐字的
)
但这不是100%便携的。如果
add_custom_命令
具有检查输出文件的选项,可能会更好