第一个参数OUTPUT或者TARGET决定了此命令何时被执行。

TARGET

意思是当target被编译完时,就执行此COMMAND

add_executable(MakeTable MakeTable.cxx)add_custom_command(    TARGET MakeTable    POST_BUILD(默认值)    COMMAND MakeTable ${CMAKE_CURRENT_BINARY_DIR}/Table2.h    )

OUTPUT

意思是OUTPUT所指局部被依赖时,才执行此COMMAND。上面的add_library( ... )如果最初不蕴含${CMAKE_CURRENT_BINARY_DIR}/Table.h 那么这个COMMAND就不会被执行

add_executable(MakeTable MakeTable.cxx) add_custom_command (  OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/Table.h  COMMAND MakeTable ${CMAKE_CURRENT_BINARY_DIR}/Table.h  DEPENDS MakeTable  ) include_directories( ${CMAKE_CURRENT_BINARY_DIR} ) add_library(Mylib SHARED mylib.cpp ${CMAKE_CURRENT_BINARY_DIR}/Table.h  )

源码地址