Команда CMake run для всех сгенерированных двоичных файлов - PullRequest
0 голосов
/ 12 июня 2018

У меня относительно большой проект CMake с большим количеством подпапок и файлов.Я хочу запустить пользовательскую команду после создания любого двоичного файла при создании этого проекта.Я тестировал Hello World, и я знаю, что мне нужно что-то вроде этого:

РЕДАКТИРОВАТЬ: я обновил вопрос, чтобы отразить мой текущий прогресс.

# Get list of all files and folders in current dir recursively
set(SUBFDIRS)
file(GLOB_RECURSE ALLFILES LIST_DIRECTORIES true "*" "*")
foreach(SUBFILE ${ALLFILES})
  IF(IS_DIRECTORY ${SUBFILE} AND NOT ${SUBFILE} MATCHES ".*CMakeFiles.*")
    message("Adding directory: ${SUBFILE}")
    LIST(APPEND SUBDIRS ${SUBFILE})
  ENDIF()
endforeach()

# Also add current directory to directory list
LIST(APPEND SUBDIRS .)
LIST(REMOVE_DUPLICATES SUBDIRS)

message("-- Detected subdirectories: ${SUBDIRS}")

# Loop over all subdirectories
foreach(subdir ${SUBDIRS})
  # Get a list of all targets
  get_property(BUILDSYSTEM_TARGETS DIRECTORY ${subdir} PROPERTY BUILDSYSTEM_TARGETS)

  # For each target, add a custom target that will run a custom command
  foreach(TARGET_DEFINED ${BUILDSYSTEM_TARGETS})
    get_target_property(target_type ${TARGET_DEFINED} TYPE)
    if (target_type STREQUAL "EXECUTABLE")
      message("-- Adding custom target for executable ${TARGET_DEFINED}...")
      add_custom_target(custom_${TARGET_DEFINED} ALL)
      add_custom_command(TARGET custom_${TARGET_DEFINED}
        POST_BUILD
        COMMAND my_custom_command $<TARGET_FILE:${TARGET_DEFINED}> $<TARGET_FILE:${TARGET_DEFINED}>
        WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
        DEPENDS $<TARGET_FILE:${TARGET_DEFINED}>
      )
    else()
      message("-- Target ${TARGET_DEFINED} is not an executable. Ignoring!")
    endif()
  endforeach()

endforeach()

Это кажетсяработать так, как я хочу, за исключением того факта, что он генерирует ошибки CMake, подобные этой, при попытке получить список целей для каталога:

CMake Error at CMakeLists.txt:34 (get_property):
  get_property DIRECTORY scope provided but requested directory was not
  found.  This could be because the directory argument was invalid or, it is
  valid but has not been processed yet.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...