所以我有一些ADD_EXTRA_STEP的cmake定义,可以是true或false,并根据用户的需要设置.然后,在构建后我必须执行一些命令.我目前有这样的事情: add_custom_command(TARGET ${some_target} POST_BUILD COMMAND co
add_custom_command(TARGET ${some_target} POST_BUILD COMMAND <command to generate FOO.out> COMMAND <command that uses FOO.out and generates FOO2.out> COMMENT <some comment> VERBATIM ) add_custom_command(TARGET ${some_target} POST_BUILD COMMAND <some other command> COMMENT <some other comment> VERBATIM )
现在在两个add_custom_command之间,当且仅当ADD_EXTRA_STEP设置为true时,我才需要执行另一个命令.问题是为了使其工作,我需要保证FOO2.out存在.到目前为止我的想法是做这样的事情:
add_custom_command(TARGET ${some_target} POST_BUILD COMMAND <command to generate FOO.out> COMMAND <command that uses FOO.out and generates FOO2.out> COMMENT <some comment> VERBATIM ) if(${ADD_EXTRA_STEP}) add_custom_command(TARGET ${some_target} POST_BUILD COMMAND <extra step command that uses FOO2.out> COMMENT <some extra comment> VERBATIM ) endif() add_custom_command(TARGET ${some_target} POST_BUILD COMMAND <some other command> COMMENT <some other comment> VERBATIM )
但是,我怀疑这是否有效以及以这种方式实施它是否是一种“好”做法.换句话说,是否可以保证在执行add_custom_command中的命令时,先前的add_custom_command(即生成FOO2.out的命令)中的命令已经执行了?
提前致谢!
您需要将 add_custom_command与 add_custom_target结合使用主要思想是在第一步使用add_custom_command的OUTPUT形式,其中OUTPUT等于FOO2.out,然后在条件目标/命令中将FOO2.out指定为DEPENDS.是否使用add_custom_command或add_custom_target取决于命令中的实际操作以及在后续步骤中如何使用该命令的结果.考虑这个简单的例子:
add_executable(some_executable some_executable_source.c) add_custom_command(OUTPUT FOO2.out DEPENDS some_executable COMMAND ${CMAKE_COMMAND} -E touch FOO2.out COMMAND ${CMAKE_COMMAND} -E echo "creating FOO2.out" ) if (${ADD_EXTRA_STEP}) add_custom_target(run ALL ${CMAKE_COMMAND} -E echo "executing extra step" DEPENDS FOO2.out ) endif()
在这种情况下,如果需要,将在创建FOO2.out之后始终执行额外步骤