Предположим, у меня есть два файла main.cpp иgener_header.cpp. generate_header.cpp генерирует заголовок, содержащий данные, которые main.cpp должен запустить. основываясь на этом ответе, я могу использовать следующий код для запускаgener_header.cpp перед созданием main.cpp:
Код: Выделить всё
add_custom_target(run_generate_header
COMMAND generate_header
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
COMMENT "generating header"
)
add_dependencies(main_target run_generate_header)
Однако, поскольку создание содержимого заголовка происходит медленно, я хотел бы генерировать содержимое заголовка, только если заголовок пуст.
Чтобы добиться этого , я подумал об использовании макроса препроцессора HEADER_GENERATED и check_cxx_symbol_exists для генерации содержимого заголовка, только если макрос не определен.
Код: Выделить всё
check_cxx_symbol_exists(HEADER_GENERATED ${HEADER_PATH} HEADER_GENERATED)
if (NOT HEADER_GENERATED)
add_dependencies(main_target run_generate_header)
endif()
Проблема этого подхода заключается в том, что check_cxx_symbol_exists выполняется на этапе конфигурации, а не на этапе сборки, поэтому, если заголовок будет удален после настройки, он не будет создан повторно, и сборка завершится неудачей. Есть ли способ проверить, содержит ли заголовок данные на этапе сборки? Заранее спасибо!
Подробнее здесь:
https://stackoverflow.com/questions/786 ... sing-cmake