所以我有一些ADD_EXTRA_STEP
的cmake定义,可以是true或false,并根据用户的需要设置。然后,在构建后我必须执行一些命令。我现在有这样的事情:
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的命令)将已执行?
提前致谢!
答案 0 :(得分:7)
您需要将add_custom_command与add_custom_target
合并主要想法是在第一步使用OUTPUT
形式的add_custom_command
,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后始终执行额外步骤