CMake объектные файлы исполняемого файла в пользовательской команде - PullRequest
1 голос
/ 21 ноября 2019

У меня есть пользовательская команда, которая выполняется на этапе предварительного связывания. Я хочу вычислить контрольную сумму всех частей, которые будут частью моего исполняемого файла. Затем я хочу связать эту контрольную сумму как глобальную переменную с моим исполняемым файлом.

Пока что я могу вычислить контрольную сумму всех библиотек, которые будут связаны с моим исполняемым файлом. Но мне также нужна контрольная сумма уже существующего (потому что он уже построен) объектного файла exe. Есть ли способ получить доступ к этому объектному файлу?

add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/checksum.cpp 
    PRE_LINK
    COMMAND ${CMAKE_COMMAND} -P "${CMAKE_CURRENT_BINARY_DIR}/checksum_generator.cmake" ${LIB_DEPENDENCIES} <object_file_of_executable_target>
    DEPENDS ${LIB_DEPENDENCIES}
)

add_library(checksum STATIC ${CMAKE_CURRENT_BINARY_DIR}/checksum.cpp)
target_link_libraries(executable_target PUBLIC checksum)

Итак, мой вопрос: как я могу получить объектный файл исполняемой цели?

Каждый раз, когда я пытаюсь получить доступ к какому-либо выражению генератора executetable_target и передать его, CMake падает из-за циклических зависимостей (что верно для выходного исполняемого файла, но не для объектных файлов, поскольку они уже существуют в преэтап связывания).

1 Ответ

1 голос
/ 21 ноября 2019

Каждый раз, когда я пытаюсь получить доступ к какому-либо генератору выражения для executetable_target и передать его, CMake падает из-за циклических зависимостей

Я предполагаю, что вы создали свой исполняемый файл как библиотеку OBJECTсначала, а затем фактический исполняемый файл после его использования, вот так?

add_library(obj OBJECT ${...})

add_executable(exe $<TARGET_OBJECTS:obj>)

Вы пробовали выражение генератора $<TARGET_OBJECTS:obj> в своей пользовательской команде? Если ваш checksum.cpp связан только с исполняемой целью (а не с библиотекой объектов), это должно разрешить вашу циклическую зависимость.

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