Как мне сбросить файл, созданный cmake каждый раз, когда cmake реконфигурирует / регенерирует мои Makefiles? - PullRequest
1 голос
/ 13 мая 2019

У меня есть функция cmake, которую я использую для создания целей с надлежащими зависимостями, определенными в моих файлах debian/control проектов.Это прекрасно работает.

Теперь я хочу создать файл DOT, чтобы иметь графическое представление моих зависимостей.Для этого я создаю файл «deps.dot» следующим образом:

function(CreateTargets COMPONENT)
    [...]
    if(NOT EXISTS "${CMAKE_BINARY_DIR}/deps.dot")
        file(WRITE
                "${CMAKE_BINARY_DIR}/deps.dot"
                "digraph dependencies {\n")
    endif()
    foreach( DEP ${DEPENDS_LIST} )
        file(APPEND
                "${CMAKE_BINARY_DIR}/deps.dot"
                "\"${ARG_PROJECT_NAME}\" [shape=box];\n...
                      ...\"${ARG_PROJECT_NAME}\" -> \"${DEP}\";\n")
    endforeach()
    [...]
endfunction()

При первой настройке он работает как положено.Он создает файл с digraph dependencies {, а затем добавляет указанные зависимости в цикл foreach().

Второй добавляемый компонент не вызовет file(WRITE ..., так как файл уже существует.

Теперь, когда я делаю изменения в моих CMakeLists.txt или файлах модуля, он перезапускает эту функцию и ... к сожалению повторно применяет file(APPEND ... без предварительного выполнения file(WRITE ....В результате получается совершенно неверный файл DOT.

Как узнать, что мне нужно перезапустить file(WRITE ...?

Мое текущее решение - переименовать файл в конце, когда ясоздать файл SVG:

    file(APPEND "${CMAKE_BINARY_DIR}/deps.dot" "}\n")

    # We change the name of the deps.dot file so next time the
    # configuration runs it generates a brand new file
    #
    file(RENAME
            "${CMAKE_BINARY_DIR}/deps.dot"
            "${CMAKE_BINARY_DIR}/dependencies.dot")
    execute_process(
        COMMAND dot -Tsvg ${CMAKE_BINARY_DIR}/dependencies.dot
        WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
        OUTPUT_FILE "${CMAKE_BINARY_DIR}/dependencies.svg")

Это работает при условии, что конфигурация работает правильно.Если возникает ошибка, файл deps.dot задерживается, и я получаю эту ошибку от DOT, говоря, что файл не является допустимым графиком.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...